一、实验目的:练习Quartus II和Modelsim软件的使用。
二、完成课本例题4.8(BCD码加法器),进行综合和仿真(包括功能仿真和时序仿真),查看仿真结果,将Verilog代码和仿真波形图整理入实验报告。
//add4_bcd.v
module add4_bcd(cout,sum,ina,inb,cin);
input cin; input[3:0] ina,inb;
output[3:0] sum; reg[3:0] sum;
output cout; reg cout;
reg[4:0] temp;
always @(ina,inb,cin)
begin temp=ina+inb+cin;
if(temp>9) {cout,sum}=temp+6;
else {cout,sum}=temp;
end
endmodule
//test.v
`timescale 1ns/1ns
module test;
reg cin; reg[3:0] ina,inb;
wire[3:0] sum;
wire cout;
add4_bcd A(cout,sum,ina,inb,cin);
initial
begin
cin=0;ina=4'b0000;inb=4'b0000;
#10 ina=4'b0001;inb=4'b0000;cin=0;
#10 ina=4'b0001;inb=4'b0001;cin=0;
#10 ina=4'b1001;inb=4'b1001;cin=0;
#10 ina=4'b0000;inb=4'b0000;cin=0;
#100 $stop;
end
endmodule
三、完成课本例题4.11(加法计数器),进行综合和仿真(包括功能仿真和时序仿真),查看仿真结果,将Verilog代码和仿真波形图整理入实验报告。
//count4.v
module count4(out,reset,clk);
input reset,clk;output reg[3:0] out;
always @(posedge clk)
begin
if(reset) out<=0;
else out<=out+1;
end
endmodule
//test1.v
`timescale 1ns/1ps
module test1;
reg clk,reset;
wire [3:0] out;
count4 il(
.clk(clk),
.out(out),
.reset(reset)
);
parameter PERIOD=40;
initial begin
reset=1; clk=0;
#PERIOD; reset=0;
#(PERIOD*50) $stop;
end
always begin
#(PERIOD/2) clk = ~clk;
end
endmodule