微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 小脚丫实现38译码器——模块建模和门级建模初探

小脚丫实现38译码器——模块建模和门级建模初探

时间:10-02 整理:3721RD 点击:
verilog HDL建模分三种方式:
1、模块建模
2、门级建模
3、开关建模
这里用38译码器感受下1、2的区别:开发平台:STEP-MXO2-C
在官网,我找到了38译码器的模块级建模代码:

  1. module decode38 (sw,led);

  2.         input [2:0] sw;                                                        //开关输入信号,利用了其中3个开关作为3-8译码器的输入
  3.         output [7:0] led;                                                //输出信号控制特定LED

  4.         reg [7:0] led;                                //定义led为reg型变量,在always过程块中只能对reg型变量赋值

  5.         //always过程块,括号中sw为敏感变量,当sw变化一次执行一次always中所有语句,否则保持不变
  6.         always @ (sw)
  7.         begin
  8.                 case(sw)                                  //case语句,一定要跟default语句
  9.                         3'b000:        led=8'b0111_1111;            //条件跳转,其中“_”下划线只是为了阅读方便,无实际意义  
  10.                         3'b001:        led=8'b1011_1111;              //位宽'进制+数值是Verilog里常数的表达方法,进制可以是b、o、d、h(二、八、十、十六进制)
  11.                         3'b010:        led=8'b1101_1111;
  12.                         3'b011:        led=8'b1110_1111;
  13.                         3'b100:        led=8'b1111_0111;
  14.                         3'b101:        led=8'b1111_1011;
  15.                         3'b110: led=8'b1111_1101;
  16.                         3'b111:        led=8'b1111_1110;
  17.                         default: ;
  18.                 endcase
  19.         end

  20. endmodule

复制代码

看起来跟c这种语言的描述方式很像,但学过数点的总是很喜欢直接用门电路,一来好玩,而来更有逼格,于是乎自己小写一段代码,实现效果相同:

  1. module decode38 (sw,led);

  2.         input [2:0] sw;                                                        //开关输入信号,利用了其中3个开关作为3-8译码器的输入
  3.         output [7:0] led;                                                //输出信号控制特定LED

  4.         wire [2:0] swt;
  5.         
  6.         not(swt[0],sw[0]);
  7.         not(swt[1],sw[1]);
  8.         not(swt[2],sw[2]);
  9.         
  10.         nand(led[0],sw[2],sw[1],sw[0]);
  11.         nand(led[1],sw[2],sw[1],swt[0]);
  12.         nand(led[2],sw[2],swt[1],sw[0]);
  13.         nand(led[3],sw[2],swt[1],swt[0]);
  14.         nand(led[4],swt[2],sw[1],sw[0]);
  15.         nand(led[5],swt[2],sw[1],swt[0]);
  16.         nand(led[6],swt[2],swt[1],sw[0]);
  17.         nand(led[7],swt[2],swt[1],swt[0]);
  18.         
  19. endmodule
  20.         

复制代码

引脚分配:


学习了解一下   

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top