实验1 QuartusII9.1软件的使用
一、实验目的
通过模十计数器,掌握QUARTUSII9.1软件的使用;
掌握VerilogHDL语言实现组合逻辑、时序逻辑的设计以及QUARTUSII9.1软件的使用。
二、实验步骤
软件使用步骤;
- 创建project工程文件,命名为count10
- 创建verilog VHDL文件将代码贴贴进去
module count10
(
input clk,
input en,
input clr,
output reg [6:0] seg
);
reg [3:0] qout;
always @ (posedge clk or posedge clr) begin
if (clr)
qout <= 4'b0000;
else
if ( en )
if (qout == 4'b1001)
qout <= 4'b0000;
else
qout <= qout +1 ;
else
qout <= qout ;
end
always @ (qout) begin
case (qout)
0:seg <= 7'b1000000;
1:seg <= 7'b1111001;
2:seg <= 7'b0100100;
3:seg <= 7'b0110000;
4:seg <= 7'b0011001;
5:seg <= 7'b0010010;
6:seg <= 7'b0000010;
7:seg <= 7'b1111000;
8:seg <= 7'b0000000;
9:seg <= 7'b0010000;
default:seg <= 7'b0001000;
endcase
end
endmodule
然后保存为count10并进行编译
仿真参数设置;
建立仿真通道文件,使用仿真工具
三、软件仿真
仿真结果的记录;
时序仿真
功能仿真
四、程序设计流程图或程序设计思路
三个输入:显示七段译码管(代码已经给出)第一个实验为熟悉软件
实验2 模十状态机与7段译码器显示设计与仿真
一、实验目的
通过设计频率可选的模十状态机以及7段译码电路以进一步掌握VerilogHDL硬件描述语言。
实验流程:
本设计有分频器、多路选择器、状态机和译码器。
时钟输入作为分频器的输入,输出时钟分别为2分频、4分频、8分频和16分频;
四个频率的时钟信号由4选1的多路选择器选择其中之一作为状态机的时钟输入;
使用选中的时钟频率作为输入驱动状态机按照以下的次序输出:0->2->5->6->1->9->4->8->7->3->0的顺序输出;
使用此输出作为驱动输入到7段译码器的显示逻辑。
二、实验步骤
软件使用步骤;
建立文件,建立Verilog文件
代码:
module ex3_states
(
input clk,reset,
input [1:0] sel,
output reg [6:0] seg
);
reg [3:0] now_state;
reg [3:0] next_state;
reg clk_f;
reg [3:0] count;
always @ (posedge clk or posedge reset) begin
if (reset)
count <= 4'b0000;
else
count <= count + 1;
end
always @ (sel) begin
case (sel)
2'b00:clk_f=count[0];
2'b01:clk_f=count[1];
2'b10:clk_f=count[2];
2'b11:clk_f=count[3];
endcase
end
always @ (posedge clk_f or posedge reset) begin
if (reset)
now_state <= 4'd0;
else
now_state <= next_state;
end
always @ (now_state) begin
case(now_state)
4'b0000:next_state = 4'b0010;
4'b0010:next_state = 4'b0101;
4'b0101:next_state = 4'b0110;
4'b0110:next_state = 4'b0001;
4'b0001:next_state = 4'b1001;
4'b1001:next_state = 4'b0100;
4'b0100:next_state = 4'b1000;
4'b0111:next_state = 4'b0011;
4'b0011:next_state = 4'b0000;
endcase
end
always @ (now_state) begin
case (now_state)
0: seg <= 7'b1000000;
1: seg <= 7'b1111001;
2: seg <= 7'b0100100;
3: seg <= 7'b0110000;
4: seg <= 7'b0011001;
5: seg <= 7'b0010010;
6: seg <= 7'b0000010;
7: seg <= 7'b1111000;
8: seg <= 7'b0000000;
9: seg <= 7'b0010000;
default: seg<= 7'b0001000;
endcase
end
endmodule
保存并编译
仿真参数设置;
三、软件仿真
仿真结果的记录;
RST有效和二分频结果:
4分频结果:
8和16分频结果:
四、程序设计流程图或程序设计思路
Cout进行4分频,用reset进行状态机的置零,用next_statea和now_states进行现态和次态的转换,seg负责七段译码管的表达
实验3 数字钟的设计与仿真
一、实验目的
通过设计实现的数字钟的设计与仿真,以熟悉和掌握VerilogHDL语言编程。
实验流程:
系统整体计数器模块组成。
输入引脚有3+16根,其中三位分别为时钟(提供整个系统的时钟信号)、复位(系统复位信号)和置位信号(用于将时间设置到需要观察的位置)。十六位分别为分钟个位和十位、秒个位和十位。
输出引脚有16根,分别位分钟个位和十位、秒个位和十位。
二、实验步骤
软件使用步骤;
同实验一和二,建立project和Verilog文件
键入代码:
module timer
(
input clk,
input clr,
input load,
input [3:0] min_h_t,
input [3:0] min_l_t,
input [3:0] sec_h_t,
input [3:0] sec_l_t,
output reg [3:0] min_h,
output reg [3:0] min_l,
output reg [3:0] sec_h,
output reg [3:0] sec_l
);
always @(posedge clk or posedge clr) begin
if (clr) begin
min_h <= 0;
min_l <= 0;
sec_h <= 0;
sec_l <= 0;
end
else if (load) begin
min_h <= min_h_t;
min_l <= min_l_t;
sec_h <= sec_h_t;
sec_l <= sec_l_t;
end
else begin
if (sec_l == 9) begin
sec_l <= 0;
if (sec_h == 5) begin
sec_h <= 0;
if (min_l == 9) begin
min_l <= 0;
if (min_h == 5)
min_h <= 0;
else
min_h <= min_h + 1;
end
else
min_l <= min_l + 1;
end
else
sec_h <= sec_h + 1;
end
else
sec_l <= sec_l + 1;
end
end
endmodule
保存并编译
仿真参数设置;
三、软件仿真
仿真结果的记录;
59分57秒:
59秒:
9分59秒:
四、程序设计流程图或程序设计思路
用if的嵌套语句来进行进位,用load来控制数字钟时间的输入控制。注意分钟和秒钟的进位关系。
总结:心得体会
通过软件仿真,我深入了解了数字电路中模10状态机的原理以及七段译码管的构造,知道了数字钟的原理和进位机制。通过用Verilog语言编写电路模块,深入了解了Verilog语言的模块,知道了输入输出设置,寄存器的运用以及用always模块写顺序语句。软件实验让我对Verilog语言有了一个更加全面深入的了解。同时,知道了如何运用quartusII软件编写程序并进行仿真。总体来讲这次实验对我收益很大。