一、实验目的
运用Quartus软件与Modelism联合仿真
二、实验内容运用Quartus软件与Modelsim软件尝试建立一个门级模型
三、实验原理按照视频上的内容,书写和运行代码,完成实验和仿真
四、实验工具电脑、Quartus软件与Modelsim软件
五、实验过程截屏及代码
实验截图:
实验一:
实验代码:
module ex8_1(clock,reset,x,y1,y2);
input clock,reset;
input x;
output y1,y2;
reg y1,y2;
reg[3:0] cstate,nstate;
parameter s0=4'b0001,s1=4'b0010,
s2=4'b0100,s3=4'b1000;
always @(posedge clock or posedge reset)
begin
if(reset)
cstate<=s0;
else
cstate<=nstate;
end
always @(cstate or x)
begin
case(cstate)
s0:begin
if(x==0)
nstate=s1;
else
nstate=s3;
end
s1:begin
if(x==0)
nstate=s2;
else
nstate=s0;
end
s2:begin
if(x==0)
nstate=s3;
else
nstate=s1;
end
s3:begin
if(x==0)
nstate=s0;
else
nstate=s2;
end
default:nstate=s0;
endcase
end
always @(cstate or x)
begin
case(cstate)
s0:begin
if(x==0)
y1=1;
else
y1=0;
end
s1:begin
if(x==0)
y1=0;
else
y1=0;
end
s2:begin
if(x==0)
y1=0;
实验二:
实验代码:
module my_rs(reset,set,q,qbar);
input reset,set;
output q,qbar;
nor #(1) n1(q,reset,qbar);
nor #(1) n2(qbar,set,q);
endmodule
module tb_71;
reg set,reset;
wire q,qbar;
initial
begin
set<=0;reset<=1;
#10 set<=0;reset<=0;
#10 set<=1;reset<=0;
#10 set<=1;reset<=1;
end
my_rs rs1(reset,set,q,qbar);
initial
$monitor($time,"set= %b,reset= %b,q= %b,qbar= %b",set,reset,q,qbar);
endmodule
实验三:
实验代码:
module div2(clk, reset, start, A, B, D, R, ok, err);
parameter n = 32;
parameter m = 16;
input clk, reset, start;
input [n-1:0] A, B;
output [n+m-1:0] D;
output [n-1:0] R;
output ok, err;
wire invalid, carry, load, run;
div_ctl UCTL(clk, reset, start, invalid, carry, load, run, err, ok);
div_datapath UDATAPATH(clk, reset, A, B, load, run, invalid, carry, D, R);
endmodule
module div_ctl(clk, reset, start, invalid, carry, load, run, err, ok);
parameter n = 32;
parameter m = 16;
parameter STATE_INIT = 3'b001;
parameter STATE_RUN = 3'b010;
parameter STATE_FINISH = 3'b100;
input clk, reset, start, invalid, carry;
output load, run, err, ok;
reg [2:0] current_state, next_state;
reg [5:0] cnt;
reg load, run, err, ok;
always @(posedge clk or negedge reset)
begin
if(!reset) begin
current_state <= STATE_INIT;
cnt <= 0;
end else begin
current_state <= next_state;