实验六Verilog设计分频器计数器电路.docx
《实验六Verilog设计分频器计数器电路.docx》由会员分享,可在线阅读,更多相关《实验六Verilog设计分频器计数器电路.docx(25页珍藏版)》请在冰点文库上搜索。
实验六Verilog设计分频器计数器电路
实验六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、输入程序:
modulefenpinqi10(clk,reset,clkout);
inputclk,reset;
outputclkout;
regclkout;
reg[2:
0]cnt;
always@(posedgeclk,negedgereset)
begin
if(!
reset)
beginclkout<=0;cnt<=0;end
elseif(cnt==4)
begincnt<=0;clkout<=~clkout;end
elsecnt<=cnt+1;
end
endmodule
4、设置顶层实体名(点settings>general>下拉选fenpinqi10)
5、编译
6、执行>CreateSymbolFilesforCurrentFlie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真结果如下:
总结:
仿真结果与实验一的题意相符,所以仿真正确。
第二个实验:
1、打开QuartusII,新建一个工程couter10yjq
2、新建一个Verilog HDL文件输入文件couter10yjq.v
3、输入程序
modulecouter10(CLK,CLR,C,Q);
inputCLK,CLR;
outputC;output[3:
0]Q;
regC=0;reg[3:
0]Q=0;
always@(posedgeCLK)
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、执行>CreateSymbolFilesforCurrentFlie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真结果如下:
总结:
仿真结果与题意相符,故仿真正确。
第三个实验
1、打开QuartusII,新建一个工程couter8yjq
2、新建一个Verilog HDL文件输入文件couter8yjq.v
3、输入程序
modulecouter8(CLK,CLR,UPDOWN,C,Q);
inputCLK,CLR,UPDOWN;
outputC;output[7:
0]Q;
regC;reg[7:
0]Q;
always@(posedgeCLK)
begin
if(CLR==0)
begin
C<=0;Q<=0;
end
elseif(UPDOWN==1)
begin
if(Q=='b1111111)
begin
Q<=0;C<=~C;
end
elseQ<=Q+1;
end
else
begin
if(Q=='b0000000)
begin
Q<='b1111111;C<=~C;
end
elseQ<=Q-1;
end
end
endmodule
4、设置顶层文件(点settings>general>下拉选couter8)
5、编译
6、执行>CreateSymbolFilesforCurrentFlie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真
总结:
仿真结果与题意相符,故仿真正确。
第四个实验
1、打开QuartusII,新建一个工程mcout5yjq
2、新建一个Verilog HDL文件输入文件mcout5yjq.v
3、输入程序
modulemcout5(M1,M0,CLK,out,c,CLR);
inputM1,M0,CLK,CLR;
outputc;
output[5:
0]out;
regc;
reg[5:
0]M;
reg[5:
0]N;
reg[5:
0]out;
always@(posedgeCLKorposedgeCLR)
begin
if(CLR)
begin
out<=0;N<=0;
end
else
begin
N<=M;
case({M1,M0})
'b00:
M<=18;
'b01:
M<=4;
'b10:
M<=12;
'b11:
M<=6;
endcase
if(N==M)
begin
if(out==M)
begin
out<=0;c<=~c;
end
else
begin
out<=out+1;
end
end
else
begin
out<=0;c<=0;
end
end
end
endmodule
4、设置顶层文件(点settings>general>下拉选mcout5)
5、编译
6、执行>CreateSymbolFilesforCurrentFlie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真
总结:
仿真结果与题意相符,故仿真正确。
第五个实验
1、打开QuartusII,新建一个工程counter2_10yjq
2、新建一个Verilog HDL文件输入文件counter2_10yjq.v
3、输入程序
modulecounter2_10(clk,clr,ena,cout,ql,qh);
inputclk,clr,ena;
outputcout;
output[3:
0]ql,qh;
reg[3:
0]qh,ql;
regcout;
always@(posedgeclkorposedgeclr)
begin
if(clr)
begin
qh<=0;
ql<=0;
cout<=0;
end
elseif(ena)
begin
ql<=ql+1;
if(ql=='b1010)
begin
ql<=0;qh<=qh+1;
if(qh=='b1010)
begin
qh<=0;
cout<=~cout;
end
end
end
end
endmodule
4、设置顶层文件(点settings>general>下拉选counter2_10)
5、编译
6、执行>CreateSymbolFilesforCurrentFlie为VHDI设计文件生成原件符号
7、建立波形文件
8、导入引脚
9、仿真
总结:
仿真结果与题意相符,故仿真正确。