Verilog HDL混合设计描述方式
发布时间:2008/5/28 0:00:00 访问次数:438
在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。
下面是混合设计方式的1位全加器实例。
module fa_mix (a, b, cin, sum, cout);
input a,b, cin;
output sum, cout;
reg cout;
reg t1, t2, t3;
wire s1;
xor x1(s1, a, b); // 门实例语句。
always
@ ( a or b or cin ) begin // always 语句。
t1 = a & cin;
t2 = b & cin;
t3 = a & b;
cout = (t1 t2) t3;
end
assign sum = s1 ^ cin; // 连续赋值语句。
endmodule
只要a或b上有事件发生,门实例语句即被执行。只要a、b或cin上有事件发生,就执行always 语句,并且只要s1或cin上有事件发生,就执行连续赋值语句。
下面是混合设计方式的1位全加器实例。
module fa_mix (a, b, cin, sum, cout);
input a,b, cin;
output sum, cout;
reg cout;
reg t1, t2, t3;
wire s1;
xor x1(s1, a, b); // 门实例语句。
always
@ ( a or b or cin ) begin // always 语句。
t1 = a & cin;
t2 = b & cin;
t3 = a & b;
cout = (t1 t2) t3;
end
assign sum = s1 ^ cin; // 连续赋值语句。
endmodule
只要a或b上有事件发生,门实例语句即被执行。只要a、b或cin上有事件发生,就执行always 语句,并且只要s1或cin上有事件发生,就执行连续赋值语句。
在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。
下面是混合设计方式的1位全加器实例。
module fa_mix (a, b, cin, sum, cout);
input a,b, cin;
output sum, cout;
reg cout;
reg t1, t2, t3;
wire s1;
xor x1(s1, a, b); // 门实例语句。
always
@ ( a or b or cin ) begin // always 语句。
t1 = a & cin;
t2 = b & cin;
t3 = a & b;
cout = (t1 t2) t3;
end
assign sum = s1 ^ cin; // 连续赋值语句。
endmodule
只要a或b上有事件发生,门实例语句即被执行。只要a、b或cin上有事件发生,就执行always 语句,并且只要s1或cin上有事件发生,就执行连续赋值语句。
下面是混合设计方式的1位全加器实例。
module fa_mix (a, b, cin, sum, cout);
input a,b, cin;
output sum, cout;
reg cout;
reg t1, t2, t3;
wire s1;
xor x1(s1, a, b); // 门实例语句。
always
@ ( a or b or cin ) begin // always 语句。
t1 = a & cin;
t2 = b & cin;
t3 = a & b;
cout = (t1 t2) t3;
end
assign sum = s1 ^ cin; // 连续赋值语句。
endmodule
只要a或b上有事件发生,门实例语句即被执行。只要a、b或cin上有事件发生,就执行always 语句,并且只要s1或cin上有事件发生,就执行连续赋值语句。
上一篇:Verilog HDL设计模拟