集成电路与verilog语言实验报告
);
initial
clk = 1'b0; always #5 clk = ~clk; initial begin // Initialize Inputs nrst = 0; // Wait 100 ns for global reset to finish #30; // Add stimulus here nrst = 1; #500; #20$finish; end endmodule
仿真结果:
实验4题目:对一个400MHz的时钟分别完成2、4、8分频。
源代码:
module divclk(clkin,nrst,din, clkout);
input clkin; input nrst;
input [1:0] din; output clkout; reg [28:0] q; reg clkout; initial begin
q <=29'b0; end
always @(posedge clkin or negedge nrst) begin
if(~nrst)
q <= 29'b0;
第11页 共15页
集成电路与verilog语言实验报告
else
q <= q + 29'b1; end
always @(posedge clkin) begin
case(din) 2'b00:
clkout <= q[0]; 2'b01:
clkout <= q[1]; 2'b10:
clkout <= q[2]; default:
clkout <= 1'bz; endcase end
endmodule
综合结果: TB文件:
module tb_div;
// Inputs reg clkin; reg nrst;
reg [1:0] din; // Outputs wire clkout;
// Instantiate the Unit Under Test (UUT) divclk uut (
.clkin(clkin), .nrst(nrst), .din(din), .clkout(clkout) );
initial clkin = 1'b0; always
#1.25 clkin = ~clkin; initial begin
第12页 共15页
集成电路与verilog语言实验报告
// Initialize Inputs nrst = 0; din = 2'b11;
// Wait 100 ns for global reset to finish #50;
// Add stimulus here nrst = 1; din = 2'b00; #50;
din = 2'b01; #50;
din = 2'b10;
#50; din = 2'b11; #50; #20$finish; end endmodule
仿真结果: 实验5题目:按照病情严重程度将8名病人分配到8个病房,1号病房病情最轻,8号病房病人病情最严重。每个病房有一个按钮用于呼叫医生,在医生办公室有个显示屏,用于显示哪个病房按了按钮。由于病情不同,要求当病情较严重的病房按了按钮后,医生办公室的显示屏要优先显示其病房号。
源代码:
module priority_encoder(clk,I0,I1,I2,I3,I4,I5,I6,I7,Y);
input clk; input I0; input I1; input I2; input I3; input I4; input I5; input I6; input I7;
output [2:0] Y; reg [2:0] Y;
always @(posedge clk ) begin
if(I7)
第13页 共15页
集成电路与verilog语言实验报告
Y <= 3'b111; else if(I6)
Y <= 3'b110; else if(I5)
Y <= 3'b101; else if(I4)
Y <= 3'b100; else if(I3)
Y <= 3'b011; else if(I2)
Y <= 3'b010; else if(I1)
Y <= 3'b001; else if(I0)
Y <= 3'b000; else
Y <= 3'bz; end
endmodule
综合结果: TB文件: module tb2; // Inputs reg clk; reg I0; reg I1; reg I2; reg I3; reg I4; reg I5; reg I6; reg I7; // Outputs
第14页 共15页
集成电路与verilog语言实验报告
wire [2:0] Y;
// Instantiate the Unit Under Test (UUT) priority_encoder uut ( .clk(clk), .I0(I0), .I1(I1), .I2(I2), .I3(I3), .I4(I4), .I5(I5), .I6(I6), .I7(I7), .Y(Y) );
initial
clk = 1'b0; always
#2 clk = ~clk; initial begin
// Initialize Inputs I0 = 0; I1 = 0; I2 = 0; I3 = 0; I4 = 0; I5 = 0; I6 = 0; I7 = 0;
// Wait 100 ns for global reset to finish #10;
// Add stimulus here
{I7,I6,I5,I4,I3,I2,I1,I0} <= 8'b1110_1101; #10;
{I7,I6,I5,I4,I3,I2,I1,I0} <= 8'b0110_1011; #10;
{I7,I6,I5,I4,I3,I2,I1,I0} <= 8'b0011_0110; #10;
仿真结果:
第15页 共15页