实验六Verilog设计分频器计数器电路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六Verilog设计分频器/计数器电路
一、实验目的
1进一步掌握最基本时序电路的实现方法;
2学习分频器/计数器时序电路程序的编写方法;
3进一步学习同步和异步时序电路程序的编写方法。
二、实验内容
1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为5个clock周期的低电平,5个clock周期的高电平),文件命名为fenpinqi10.v。
2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK(上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为
couter10.v。
3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为couter8.v。
4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk上升沿有效,文件命名为mcout5.v。
5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR是复位输入端,高电平有效,异步清零;Q[3..0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端。
三、实验步骤:
第一个实验:
1、打开QuartusII,新建一个工程f_fenpinq10yjq
2、新建一个Verilog HDL文件
3、输入程序:
module fenpinqi10(clk,reset,clkout);
input clk,reset;
output clkout;
reg clkout;
reg[2:0] cnt;
always @(posedge clk , negedge reset)
begin
if(!reset)
begin clkout<=0;cnt<=0;end
else if(cnt==4)
begin cnt<=0;clkout<=~clkout;end
else cnt<=cnt+1;
end
endmodule
4、设置顶层实体名(点settings>general >下拉选fenpinqi10)
5、编译
6、执行file>Create/Update>Create Symbol Files for Current Flie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真结果如下:
总结:仿真结果与实验一的题意相符,所以仿真正确。
第二个实验:
1、打开QuartusII,新建一个工程couter10yjq
2、新建一个Verilog HDL文件输入文件couter10yjq.v
3、输入程序
module couter10 (CLK,CLR,C,Q);
input CLK,CLR;
output C;output[3:0] Q;
reg C=0;reg[3:0]Q=0;
always@(posedge CLK )
begin
if (CLR==1)
begin
Q<=0;C<=0;
end
else
begin
Q<=Q+1;
end
if(Q==9)
begin
C<=~C;Q<=0;
end
end
endmodule
4、设置顶层文件(点settings>general >下拉选couter10)
5、编译
6、执行file>Create/Update>Create Symbol Files for Current Flie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真结果如下:
总结:仿真结果与题意相符,故仿真正确。
第三个实验
1、打开QuartusII,新建一个工程couter8yjq
2、新建一个Verilog HDL文件输入文件couter8yjq.v
3、输入程序
module couter8 (CLK,CLR,UPDOWN,C,Q);
input CLK,CLR,UPDOWN;
output C;output[7:0]Q;
reg C;reg[7:0]Q;
always@(posedge CLK)
begin
if (CLR==0)
begin
C<=0;Q<=0;
end
else if (UPDOWN==1)
begin
if (Q=='b1111111)
begin
Q<=0;C<=~C;
end
else Q<=Q+1;
end
else
begin
if (Q=='b0000000)
begin
Q<='b1111111;C<=~C;
end
else Q<=Q-1;