查看: 4102|回复: 3

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-10 08:31
  • 签到天数: 300 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2017-9-16 21:24:43 | 显示全部楼层 |阅读模式
    分享到:
    verilog HDL建模分三种方式:
    1、模块建模
    2、门级建模
    3、开关建模
    这里用38译码器感受下1、2的区别:
    在官网,我找到了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.        
    复制代码
    引脚上图:
    JVDR{OSMLA3OZ78MJ]GQ%ET.png
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-12-21 11:14:58 | 显示全部楼层
    具体原理呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-10 08:31
  • 签到天数: 300 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-12-25 16:06:17 | 显示全部楼层
    feixiang20 发表于 2017-12-21 11:14
    具体原理呢

    38译码器啊,不就是几个与门非门输出么
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-26 22:21
  • 签到天数: 310 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2017-12-25 16:56:01 | 显示全部楼层
    由于FPGA是查表式的,软件最终综合出来的代码也就是模块建模式的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 11:42 , Processed in 0.132591 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.