1. Verilog中的module对应C++中的class。它们都可以实例化。例如可以写一个FullAdder module,表示全加器这种器件。
module FullAdder(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;
assign {cout, sum} = a + b + cin;
endmodule
然后在执行8-bit补码加减运算的ALU module中实例化8个FullAdder,表示ALU用到了8个FullAdder。
module ALU(a, b, result, cout, is_add);
input[7:0] a, b;
input is_add;
output[7:0] result;
output cout;
wire[7:0] b_not = ~b;
wire[7:0] b_in = is_add ? b : b_not;
wire[7:0] carry;
assign carry[0] = is_add ? 1'b0 : 1'b1;
// module 实例化
// 8-bit ripple adder
FullAdder fa0(a[0], b_in[0], carry[0], result[0], carry[1]);
FullAdder fa1(a[1], b_in[1], carry[1], result[1], carry[2]);
FullAdder fa2(a[2], b_in[2], carry[2], result[2], carry[3]);
FullAdder fa3(a[3], b_in[3], carry[3], result[3], carry[4]);
FullAdder fa4(a[4], b_in[4], carry[4], result[4], carry[5]);
FullAdder fa5(a[5], b_in[5], carry[5], result[5], carry[6]);
FullAdder fa6(a[6], b_in[6], carry[6], result[6], carry[7]);
FullAdder fa7(a[7], b_in[7], carry[7], result[7], cout);
endmodule
对应在C++中先写FullAdder class

本文通过对比Verilog中的module与C++中的class,阐述了Verilog如何实例化module以及模块间如何连接。文章指出,Verilog的端口声明方式类似于早期C语言的函数定义,而在调用时,Verilog允许使用名称绑定,提高了可读性和错误检查能力。此外,文章还讨论了Verilog的测试驱动开发特点和与VHDL在接口与实现分离上的差异,以及Verilog与C++在模板概念上的相似之处。
最低0.47元/天 解锁文章
536

被折叠的 条评论
为什么被折叠?



