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

Posted 立体风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一个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];

 

以上是关于第一个Verilog程序:通用加法器的主要内容,如果未能解决你的问题,请参考以下文章

基于verilog的四位全加器设计

明德扬至简设计法--verilog综合器和仿真器

verilog中除法运算在modelsim仿真中只要一个时钟周期就能完成,实际上也是这样吗?

Notepad++编辑器——Verilog代码片段直接编译

16x16移位相加乘法器verilog实现

使用 Icarus Verilog 模拟程序计数器设计时的无限循环