当前位置:   article > 正文

如何用verilog来实现倒序输出?(verilog实现反转输出)_verilog倒序

verilog倒序

输入一个16位的信号in,如何将其从低位到高位输出(即反转顺序输出)为out?

目录

输入一个16位的信号in,如何将其从低位到高位输出(即反转顺序输出)为out?

一、野蛮方法

二、always过程语句中for循环

三、generate例化for循环

一、野蛮方法

        {}位拼接运算符用于将两个或多个信号拼接起来,表示一个整体的信号,如下:

                a = {b[5],b[4:0]}

        意思为 b的最高位b[5]和b的低五位拼接起来,组成的a为6位,相当于:

                a = {b[5],b[4],b[3],b[2],b[1],b[0]}

  1. `timescale 1ns/1ns
  2. module top_module(
  3. input [15:0] in,
  4. output [15:0] out
  5. );
  6. assign out = {in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7],in[8],in[9],in[10],in[11],in[12],in[13],in[14],in[15]};
  7. endmodule

二、always过程语句中for循环

        always 内部用for循环,需要定义interger类型变量,否则有些仿真工具会报错。

  1. `timescale 1ns/1ns
  2. module top_module(
  3. input [15:0] in,
  4. output [15:0] out
  5. );
  6. reg [15:0] out1;
  7. integer i;
  8. always @(in)
  9. begin
  10. for(i=0;i<=15;i=i+1)
  11. begin
  12. out1[15-i]=in[i];
  13. end
  14. end
  15. assign out=out1;
  16. endmodule

三、generate例化for循环

        for语句在always 外部,或者使用for循环例化模块,需要定义genvar变量,否则有些仿真工具会报错。

  1. `timescale 1ns/1ns
  2. module top_module(
  3. input [15:0] in,
  4. output [15:0] out
  5. );
  6. genvar i;
  7. generate
  8. for(i=0;i<16;i=i+1)
  9. assign out[i]=in[15-i];
  10. endgenerate
  11. endmodule

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/601412
推荐阅读
相关标签
  

闽ICP备14008679号