• 电路的设计方法


    目录

    1. 逻辑闸层次(Gate Level)

    2. 资料流层次(Dataflow Level)

    3. 行为层次(Behavior Level)

    4. 暂存器转移层次(Register-Transfer Level, RTL)

    5. 总结


        前面一篇文章,我们说到了电路描述语言verilog HDL,也就是通过编写代码的方法,让EDA工具来编译我们写的代码后生成了对应的电路。

        细心的你应该发现了在小编的 “什么是verilog” 这篇文章里面在设计一个module的时候,只做了输入和输出,没有对中间的module实体进行设计编写代码,在这一章节中,小编将带大家认识一下module的设计方法有哪些。

        算了,我也不卖关子了,常见的电路设计方法有四种,分别是:逻辑闸层次(Gate Level)、资料流层次(Dataflow Level)、行为层次(Behavior Level)、暂存器转移层次(Register-Transfer Level, RTL)。

        以MUX2to1为例子,在module中的电路长下面这个样子:

    1. 逻辑闸层次(Gate Level)

        (1) 设计的格式:

    1. // 电线定义:wire 电线1, 电线2,...;
    2. // 定义逻辑闸:逻辑闸类型 逻辑闸名称 (输出, 输入1, 输入2,...)

        (2)以MUX2to1为例子:

    1. module MUX2to1(a,b,sel,c);
    2. input a,b,sel;
    3. output c;
    4. wire sel_, go, g1;
    5. not n1(sel_, sel);
    6. and a1(g0, sel, a);
    7. and a2(g1, sel_, b);
    8. or o1(c, g0, g1);
    9. endmodule

    2. 资料流层次(Dataflow Level)

        (1) 设计的格式:

    1. // 电线定义:wire 电线1, 电线2,...;
    2. // 电线赋值:assign 电线名称 = 运算式;

        (2)以MUX2to1为例子:

    1. module MUX2to1(a,b,sel,c);
    2. input a, b, sel;
    3. output c;
    4. wire g0, g1;
    5.   assign g0 = a & sel;
    6.   assign g1 = ~sel & b;
    7.   assign c = g0 | g1;
    8. endmodule

    3. 行为层次(Behavior Level)

        (1) 设计的格式:

    1. // 暂存器定义:reg 暂存器名称1, 暂存器名称2, ...; 宣告
    2. // 使用always block:always@(名称1 or 名称2, ...)
    3. //                   alwanys@(*)
    4. // 行为描述:A = B & C
    5. //           if,,,else
    6. // case
    7. always@(*)
    8. begin
    9. statement1;
    10. statement2;
    11. if (a) begin
    12. statement3;
    13. statement4;
    14.   end
    15.   else
    16.    statement5;
    17. end

        (2)以MUX2to1为例子:

    1. module MUX2to1(a,b,sel,c);
    2. input a, b, sel;
    3. output c;
    4. reg c;
    5.   always@(a or b or sel)        // 要变化的变量都需要在这里进行宣告
    6.   begin
    7.    if(sel)
    8.    c = a;
    9.     else
    10.      c = b;
    11.   end
    12. endmodule

    4. 暂存器转移层次(Register-Transfer Level, RTL)

         综合上面三种设计层次的方式,混合使用。

    5. 总结

  • 相关阅读:
    mysql数据库简介及win安装
    【数据结构】线性表的顺序存储结构
    【Linux】超好用的编译工具 —— gcc/g++
    面试官:说一说如何优雅的关闭线程池,我:shutdownNow,面试官:粗鲁!
    【LeetCode】136. 只出现一次的数字
    【定义】矩阵
    多线程设计模式
    基于ChatGPT的知识图谱构建
    Scroll L2 rollup提交到L1的全流程解析
    简单说说关于shell中zsh和bash的选择
  • 原文地址:https://blog.csdn.net/weixin_43340455/article/details/126688147