Verilog-HDL建模例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一位全加器的设计
方法一:
and (m1, a, b),
(m2, b, cin),
(m3, a, cin);
xor (s1, a, b),
(sum, s1, cin);
or (cout, m1, m2, m3);
方法二:
assign sum = a ^ b ^ cin;
assign cout = (a & b ) | (b & cin ) | (cin & a );
方法三:
always @(a or b or cin)
begin
m1=a&b;
m2=b&cin;
m3=a&cin;
sum=(a^b)^cin;
cout=(m1|m2)|m3;
end
方法四:混合结构描述1位加法器。
module full_add4(a, b, cin, sum, cout);
input a,b,cin;
output sum,cout;
reg cout;
reg m1,m2,m3;
wire s1;
xor x1(s1,a,b);//门级例化语句
always @(a or b or cin) //行为描述
begin
m1=a&b;
m2=b&cin;
m3=a&cin;
cout=(m1|m2)|m3;
end
assign sum=s1^cin;//数据流描述语句endmodule
方法五:向量拼接法
wire Cout, Cin ;
wire Sum, A, B;
assign {Cout, Sum} = A + B + Cin;
4位加法器的设计
结构建模的4位级连全加器
`include " full_add1.v"
module add4_1(sum, cout, a, b, cin);
output cout;
output [3:0] sum;
input cin;
input [3:0] a, b;
wire cin1,cin2,cin3;
//调用一位全加器子模块full_add1
full_add1 f0 (a[0],b[0],cin, sum[0], cin1); full_add1 f1 (a[1],b[1],cin1,sum[1], cin2); full_add1 f2 (a[2],b[2],cin2,sum[2], cin3); full_add1 f3 (a[3],b[3],cin3,sum[3], cout); endmodule
数据流建模的4位加法器
module add4_2(cout,sum,a,b,cin);
output cout;
output [3:0] sum;
input cin;
input [3:0] a,b;
//使用assign语句
assign {cout,sum}=a+b+cin; endmodule
顺序行为建模的4位加法器
module add4_3(cout,sum,a,b,cin);
output [3:0] sum;
output cout;
input [3:0] a,b;
input cin;
reg cout;
reg [3:0] sum;
always @ ( a or b or cin )
begin
{cout,sum}=a+b+cin;
end
endmodule
3-8译码器
if…else描述
module decoder3_8(in_data,out_data);
input [2:0]in_data;
output out_data;
reg [ 7:0] out_data;
always @(in_data)
if (in_data=3'b000)
out_data=8'b1111_1110; else if (in_data=3'b001)
out_data=8'b1111_1101; else if (in_data=3'b010)
out_data=8'b1111_1011; else if (in_data=3'b011)
out_data=8'b1111_0111;
else if (in_data=3'b100)
out_data=8'b1110_1111;
else if (in_data=3'b101)
out_data=8'b1101_1111;
else if (in_data=3'b110)
out_data=8'b1011_1111;
else if (in_data=3'b111)
out_data=8'b0111_1111; endmoudle
case语句描述
module decoder3_8(in_data,out_data);
input [2:0]in_data;
output out_data;
reg [ 7:0] out_data;
always @(in_data)
case(in_data)
3'b000: out_data=8'b1111_1110; 3'b001: out_data=8'b1111_1101; 3'b010: out_data=8'b1111_1011; 3'b011: out_data=8'b1111_0111;
3'b100: out_data=8'b1110_1111;
3'b101: out_data=8'b1101_1111;
3'b110: out_data=8'b1011_1111;
3'b111: out_data=8'b0111_1111; endmodule