Verilog-HDL建模例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档