数字逻辑与处理器基础
实验三 频率计 实验报告
实验目的:
掌握频率计的原理和设计方法。
实验工具:
1 Verilog语言 2 Quartus II 9.0 3 DE2实验板
实验设计:
1 总体思路以及模块总述
设计的基本思路是按照实验指导书上给出的原理图划分模块。
① 待测信号产生模块signalinput.v:由指导书给出,用于产生待测信号sigin; ② 1Hz时钟产生模块clk_1hz.v:通过实验板50MHz产生1Hz时钟clk_1hz;
③ 控制信号产生模块control.v:通过1Hz时钟,产生频率计所需的使能信号en,同
步清零信号reset,锁存信号la,生成一个3秒钟的频率计数周期;
④ 十分频模块div_10.v:若量程选择信号sw_2为高电平,则待测信号需进行十分频; ⑤ 计数器模块counter.v:频率计的核心部分,包括四位十进制计数器,以及对应七段
译码器的译码器。这里我把实验指导书中的译码模块整合在了里面,原因是认为在这个设计中单做一个译码模块意义不大,整合在里面翻倒方便一些; ⑥ 信号锁存模块lat.v:当锁存信号la为高电平时,锁存输出持续显示; ⑦ 顶层模块div.v:进行各分立模块的功能综合;
2 模块分述
(1) 待测信号产生模块
代码:
module signalinput(testmode,sysclk,sigin);
input [1:0] testmode;//00,01,10,11分别代表4种频率,分别为3125,6250,50,12500Hz,使用SW1~SW0来控制
input sysclk;//系统时钟50M output sigin;//输出待测信号
reg[20:0] state; reg[20:0] divide; reg sigin;
initial begin sigin=0;
state=21'b000000000000000000000; divide=21'b000000_1111_1010_0000000; end
always@(testmode) begin
case(testmode[1:0])
2'b00:divide=21'd16000; //3125Hz 2'b01:divide=21'd8000; //6250Hz 2'b10:divide=21'd1000000; //50Hz 2'b11:divide=21'd4000; //12500Hz endcase end
always@(posedge sysclk)//按divide分频 begin
if(state==0) sigin=~sigin;
state=state+21'b0_00__0000_0000_0000_0000_10; if(state==divide)
state=27'b000_0000_0000_0000_0000_0000_0000; end endmodule
可以看出大致由两部分构成:频率选择、分频。通过testmode的值先进行选择所需的频率,然后进行分频。
(2) 1Hz时钟产生模块
代码:
module clk_1hz(sysclk,clk); input sysclk; output clk; reg clk;
reg [31:0] counter;
initial begin
counter<=32'd00000000; clk<=0;
end
always@(posedge sysclk) begin
if(counter==32'd24999999) begin
clk<=~clk;
counter<=32'd00000000; end
else counter<=counter+32'd1; end
endmodule
把实验板上的50MHz时钟进行50M倍分频,得到1Hz时钟。
(3) 控制信号产生模块
代码:
module control(clk_1hz,en,reset,la); input clk_1hz;
output en,reset,la; reg [2:0] state=3'b000; reg en; reg reset; reg la;
parameter s0=3'b000,s1=3'b001,s2=3'b010;
always@(posedge clk_1hz) begin
case(state) s0:begin en<=1; reset<=0; la<=0; state<=s1; end s1:begin en<=0;
reset<=0; la<=1; state<=s2; end s2:begin
la<=1; reset<=1; en<=0;
state<=s0; end endcase end endmodule
通过1Hz时钟产生3个控制信号,用了一个简单的状态转移,在3秒周期内,第一秒使能信号en为高电平进行计数,第二三秒锁存信号为高电平,第三秒清零。为了验证正确性,单独进行了仿真,波形图如下图
可见功能正确。
(4) 十分频模块
代码:
module div_10(sigin,sw_2,sigout,led); input sigin,sw_2; output sigout,led; reg sigout;
reg [3:0] counter;
always@(posedge sigin) begin if(sw_2) begin
if(counter==4'd4) begin sigout<=~sigout; counter<=4'd0; end
else counter<=counter+4'd1; end end
assign led=sw_2?1:0; endmodule
当sw_2信号为高电平时,对信号进行10分频,并使led信号为1。
(5) 计数器模块
代码:
module counter(sigin,en,reset,clr,hex0,hex1,hex2,hex3); input sigin,en,reset,clr; reg [3:0] q0; reg [3:0] q1;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库频率计实验报告 - 2010011014在线全文阅读。
相关推荐: