• 第一个Verilog程序:通用加法器


    Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路。下面是第一个需要学习的Verilog例子:

    module adderN #(parameter N=4)(
        input[N-1:0] a,
        input[N-1:0] b,
        input cin,
        output cout,
        output[N-1] sum
    );
        assign{cout,sum)=a+b+cin;
    endmodule

    1、该例子描述了一个4位加法器,从例子可以看出整个模块是以module开始,endmodule结束。每一个module都是一个完整的电路描述,其余都只能认为是电路片段。一个模块就是一个完整的电路,如果有N个模块,这N个模块将通过某种机制结合起来,组成一个大的电路,但这N个模块都是独立运行的,而且是并行执行的。

    2、a,b前面有一个[N-1:0],这个表示a与b的位宽为N,最高位为第N-1位,最低位为0位,而cin没有位宽设定,则表示1位,对于任何有意义的逻辑变量(wire/reg,输入输出端口等),必须指定其位宽,如果没有显示的指定,位宽默认位1.

    3、parameter类型用来定义全局符号常量,等效于C语言的参数设定。还有一个符号常量localparam,它和parameter的区别在于,parameter可以被外部调用模块改变,而localparam仅在本模块内部有效。

    4、assign语句是连续赋值的意思。加法器是一个组合电路,当输入变化时,输出立即响应,而且这个过程是持续不断的。

    5、对于{cout,sum}的理解:这是一种对两个变量合并赋值的简化描述,HDL语法解析器和综合器按照下面的理解对上述描述进行解析,并生成电路:

    wire[N:0] adder_temp;
    //假设assgin {cout,sum}=adder_temp[N:0];
    assign cout=adder_temp[N];
    assign sum[N-1:0]=adder_temp[N-1:0];
  • 相关阅读:
    25 Groovy 相关资料
    24 使用Maven 或 Gradle构建groovy
    UVA
    UVA
    UVA
    UVA
    UVA
    【JZOJ4235】序列【数论,数学】
    【JZOJ4235】序列【数论,数学】
    【JZOJ5230】队伍统计【状压DP】
  • 原文地址:https://www.cnblogs.com/litifeng/p/8516513.html
Copyright © 2020-2023  润新知