数字电子技术基础论文
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
page 2
再来一个clk_test的上升沿清计数器 count<=0; //此算法使计数结果为BCD码 begin
end always @(posedge clk_1 or negedge reset_n) if(!reset_n) out<=8'b0 ; else if(cnt_enb==1'b1) //时基信号上升沿时若计数使能有效则锁存计数值,因为 这个沿后使能变为 begin 无效 out<=count; end assign q0=out[3:0]; assign q1=out[7:4]; endmodule 模块四 频率值的数码管显示 module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0); output a,b,c,d,e,f,g; inp ut D3,D2,D1,D0; reg a,b,c,d,e,f,g; always @(D3 or D2 or D1 or D0) begin ca se({D3,D2,D1,D0}) //用case 语句进行译码 4'd0: {a,b,c,d,e,f,g}= ̄7'b1111110; 4'd1: {a,b,c,d,e,f,g}= ̄7'b0110000; 4'd2: {a,b,c,d,e,f,g}= ̄7'b1101101; 4'd 3: {a,b,c,d,e,f,g}= ̄7'b1111001; 4'd4: {a,b,c,d,e,f,g}= ̄7'b0110011; //输入4 位BCD 码 //输出驱动7个笔划段 哈尔滨工业大学课程设计说明书(论文) 4'd5: {a,b,c,d,e,f,g}= ̄7'b101101 1; 4'd6: {a,b,c,d,e,f,g}= ̄7'b1011111; 4'd7: {a,b,c,d,e,f,g}= ̄7'b1110000; 4 'd8: {a,b,c,d,e,f,g}= ̄7'b1111111; 4'd9: {a,b,c,d,e,f,g}= ̄7'b1111011; defau lt: {a,b,c,d,e,f,g}= ̄7'b1111110; endcase end endmodule 模块五 分频系数的数码管显示 //本模块用于显示分频系数,分频系数由开关输 入 module div_display(freq_div,display_div); input output reg [3:0] freq _div; //分频系数 //转成BCD码的分频系数 [7:0] display_div; [7:0] display_div; always @(freq_div) begin if(freq_div==4'b0 || freq_div==4'b1) display_div[7:0]=8'b10; else if (freq_div>=4'b1010) begin ///二进制_to_BCD码算法:因为最大的分频比是15,所 以最高只能到1,当分频比大于4'b1010时,低位减4'b1010,高位加1 display_div[3:0]=freq_div-4'b1010; display_div[7:4]=4'b1; end else be gin display_div[3:0]=freq_div; display_div[7:4]=4'b0; end end endmodule 模块六 频率计的例化及功能实现 //本频率计可以测量对200Hz方波进行2 ̄15分 频后的方波信号的频率, 分频比由拨码开关 设置,并可以通过数码管显示测量频率 和分频比。当是偶数分配比时测量误差在正负1之 间,为奇数时误差较大。 module frequency_counter(clk_50M,HEX0,HEX1,HEX6,HEX7,reset_n,clk_test ,clk_1,freq_div,cnt_enb ,reset); input clk_50M,reset_n; input [3:0] freq_d iv; output clk_test,clk_1,cnt_enb,reset; output[6:0] HEX0,HEX1,HEX6,HEX7; wire [7:0] display_div; wire [7:0] out; assign reset=reset_n; 哈尔滨工业大学课程设计说明书(论文) //实例化各模块 clk50M_to_clk1 u1 (.clk_50M(clk_50M),.clk_1(clk_1),.reset_n(reset_n)); //直接 //间接 得到占空比50%的1Hz时钟 //clk_1Hz u1 (.clk_50M(clk_50M),.clk_1(clk_1),.reset(reset_n)); 得到占空比50%的1Hz时钟 user_clk (.clk_50M(clk_50M),.clk_test(clk_test),.freq_div(freq_div),. reset_n(reset_n)); u2 // 产 生对200Hz进行2 ̄15分频的占空比50%的方波 counter //频率计核心原理部分 c1 (.clk_test(clk_test),.clk_1(clk_1),.reset_n(reset_n),.q0(out[3:0]),.q 1(out[7:4]),.cnt _enb(cnt_enb)); decode47 .D3(out[3]),.D2(out[2]),.D1(out[1]),.D0(out[0])); //显示频率
pபைடு நூலகம்ge 1
//本模块由50M时钟分频产生占空比50%的1Hz时钟 module clk_1Hz(clk_50M,clk_1,reset); input clk_50M,reset; output clk_ 1; reg clk_1; reg clk_2; reg[25:0] count; always@(posedge clk_50M) begin i f (count ==24_999_999) begin clk_2 = 1'b1; count end else begin clk_2 = 1' b0; count = count+1; end end always@(posedge clk_2 or negedge reset) //由空 比非50%的2Hz时钟分频产生占空比50%的1Hz时钟 begin if (!reset) = 0; //count计 数终点 = f_in/f_out-1 = 50*10^6/2-1 //产生占空比非50%的2Hz时钟 哈尔滨工业大学课程设计说明书(论文) clk_1 = 1'b0; else clk_1 =  ̄ clk _1; end endmodule 方法二 //本模块由50M时钟分频直接产生占空比50%的1Hz时钟 module clk50M_to_clk1(clk_50M,clk_1,reset_n); input clk_50M,reset_n; output clk_1; reg [26:0]count; reg clk_1; always @(posedge clk_50M or nege dge reset_n) begin if(!reset_n) begin count<=0; clk_1<=0; end else if(coun t ==24_999_999) begin f_in/(2*f_out)-1 = 50*10^6/2-1=24999999 clk_1<= ̄clk_ 1; count<=0; end else count<=count+27'b1; // 占 空 比 50% 方 波 count 计 数 终 点 = //1Hz时钟 end endmodule 模块二 被测信号的分频获取 //本模块用于产生被测频率的方波,先分频产生2 00Hz频率方波,再由输入参数freq_div 决定对200Hz进行2 ̄15分频比的分频,从而产 生最后的被测方波 module user_clk(clk_50M,clk_test,freq_div,reset_n); input clk_50M; in put input [3:0] freq_div; reset_n; //被测方波 //输入分频参数 output clk_test; reg clk_test; reg clk_200Hz; reg [25:0] count; reg [ 3:0] cnt; wire [3:0] div; always@(posedge clk_50M) 哈尔滨工业大学课程设计说明书(论文) begin if (count =='d24_9999) //产 生占空比非50%的200Hz时钟 begin clk_200Hz <= 1'b1; count end else begin clk _200Hz <= 1'b0; count <= count+26'b1; end end /*always@(posedge clk_100Hz) begin clk_test<=  ̄ clk_test; end*/ assign div=(freq_div==4'b0) ? 1'b0 : / /已知分频比N,求cnt计数终点。由于产生方波,cnt //由N>>1来计算N/2,同时在N= 0 //对200Hz进行2 ̄15分频比的分频, <= 0; 计数终点=N/2-1 (freq_div==4'b1) ? 1'b0 : ((freq_div>>1)-1); 和1的情况,使cnt计数终点为零即2分频 always @(posedge clk_200Hz or negedge reset_n) begin 从而产生最后的被测方波 if(!reset_n) cnt<=0; else if(cnt==div) cnt<=0; clk_test<= ̄clk_test; e nd else cnt<=cnt+1'b1; end endmodule begin 模块三 频率计中计数与锁存部分的实现 //clk_1作为时基信号开启计数,clk_ test作为计数时钟 module counter(clk_test,clk_1,reset_n,q0,q1,cnt_enb); input clk_test, clk_1,reset_n; output [3:0] q0,q1; output cnt_enb; reg cnt_enb; reg [7:0] count; reg [7:0] out; 哈尔滨工业大学课程设计说明书(论文) always @(posedge clk_1 or negedg e reset_n) if(!reset_n) cnt_enb<=0; begin else cnt_enb<= ̄cnt_enb; //使能开启1S end always @(posedge clk_test or negedge reset_n) if(!reset_n ) count<=8'b0; else if((cnt_enb==1'b1)&&(cou nt[3:0]==4'b1001)) begin count[3:0]<=0; count[7:4]<=count[7:4]+1'b1; end e lse if(cnt_enb==1'b1) count[3:0]<=count[3:0]+1'b1; else //计数使能无效后,
本文由yirgui贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机 查看。 哈尔滨工业大学课程设计说明书(论文) 数字式频率计 设计任务 在 FPGA 实验板上,利用 FPGA 编程设计一个数字式频率计。 设计要 求与目的 1.利用实验板上的 50M 时钟分频作为被测输入信号;分频成 1Hz 作为时基信 号;(要 求在示波器上显示被测信号和时基信号) 2.数码管显示的频率范围为 00 ̄9 9Hz。 3.测量精度为±1Hz。 设计原理分析 1.频率是指单位时间(1s)内信号振动的次数。当被测信号在一定的时间段 Ts 内 的周期个 数为 N 时,则被测信号的频率: fx = N Ts 2.从测量的角度看,即单位时间测 得的被测信号的脉冲数。被测信号送入通 道 ,经放大整形后,使每个周期形成一个脉冲,用计数器计算脉冲的个数,即为频率。 如下图 1 所示: N Ts 图1 方案设计 由上述原理可以知道,要实现频率计,从硬件方面看,需要时基电路 、单稳 态触发器、放大整形电路、闸门电路、计数器、锁存器和译码显示器等。其硬件 结构图 如下图 2 所示: 译码显示 器 单稳态触发 器 C 单稳态触发 器 B 时基电 路 C 清零 锁存 锁存器 计数器 E 闸门电路 A 放大整形电 路 D 图 2 硬件结构图 而从数字电路时序的角度去分析,其时序图如下图 3 所示:
哈尔滨工业大学课程设计说明书(论文) 图 3 时序图 其中,A-被测信号;B-时基信号,秒脉冲;E-计数器计数脉冲信号 ;C-锁存器送数信 号;D-计数器清零信号。 当时基信号出现上升沿时,计数器开始 计数,计到时基信号下 降沿出现,计数器停止计数,此时锁存器送数信号出现上升沿 有效,给数码管送数,等 送数结束后,计数器出现一个上升沿对计数器清零。当下一 个时钟周期到来时,是一样 的过程。 频率计的输入输出关系如下表一所示: 表一 输入输出信号 输入 : clk1Hz uclk 输出: led0 led1 p_cnt_en p_rst_cnt p_loa d 频率值最低位 频率值次低位 计数允许(1 s) 复位计数器 锁存到寄存器中 基准时 钟输入 待测信号输入 哈尔滨工业大学课程设计说明书(论文) 图 4 FPGA 内部均衡逻辑图 方案优化与确定 在满足基础要求后,我们进行设计了的创新。首先,我们在逻 辑中采 用时序逻辑电路的编程方法,即在时基信号为"1"时闸门开启,自动开始计数, 下降沿来 时锁存数据并输出。为了增加频率计的实际应用功能,我们增设了手动分频 功能,即给 出一个 200HZ 的基础频率,通过拨动开关输入想要分频的倍数并显示在 LED 数码管上, 频率计即可自行计算出分频后的频率值。具体的实现方案将在下文 的程序中给出。 方案实现及程序 模块一 1Hz时基信号的分频 时基信号的分频 方法一
再来一个clk_test的上升沿清计数器 count<=0; //此算法使计数结果为BCD码 begin
end always @(posedge clk_1 or negedge reset_n) if(!reset_n) out<=8'b0 ; else if(cnt_enb==1'b1) //时基信号上升沿时若计数使能有效则锁存计数值,因为 这个沿后使能变为 begin 无效 out<=count; end assign q0=out[3:0]; assign q1=out[7:4]; endmodule 模块四 频率值的数码管显示 module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0); output a,b,c,d,e,f,g; inp ut D3,D2,D1,D0; reg a,b,c,d,e,f,g; always @(D3 or D2 or D1 or D0) begin ca se({D3,D2,D1,D0}) //用case 语句进行译码 4'd0: {a,b,c,d,e,f,g}= ̄7'b1111110; 4'd1: {a,b,c,d,e,f,g}= ̄7'b0110000; 4'd2: {a,b,c,d,e,f,g}= ̄7'b1101101; 4'd 3: {a,b,c,d,e,f,g}= ̄7'b1111001; 4'd4: {a,b,c,d,e,f,g}= ̄7'b0110011; //输入4 位BCD 码 //输出驱动7个笔划段 哈尔滨工业大学课程设计说明书(论文) 4'd5: {a,b,c,d,e,f,g}= ̄7'b101101 1; 4'd6: {a,b,c,d,e,f,g}= ̄7'b1011111; 4'd7: {a,b,c,d,e,f,g}= ̄7'b1110000; 4 'd8: {a,b,c,d,e,f,g}= ̄7'b1111111; 4'd9: {a,b,c,d,e,f,g}= ̄7'b1111011; defau lt: {a,b,c,d,e,f,g}= ̄7'b1111110; endcase end endmodule 模块五 分频系数的数码管显示 //本模块用于显示分频系数,分频系数由开关输 入 module div_display(freq_div,display_div); input output reg [3:0] freq _div; //分频系数 //转成BCD码的分频系数 [7:0] display_div; [7:0] display_div; always @(freq_div) begin if(freq_div==4'b0 || freq_div==4'b1) display_div[7:0]=8'b10; else if (freq_div>=4'b1010) begin ///二进制_to_BCD码算法:因为最大的分频比是15,所 以最高只能到1,当分频比大于4'b1010时,低位减4'b1010,高位加1 display_div[3:0]=freq_div-4'b1010; display_div[7:4]=4'b1; end else be gin display_div[3:0]=freq_div; display_div[7:4]=4'b0; end end endmodule 模块六 频率计的例化及功能实现 //本频率计可以测量对200Hz方波进行2 ̄15分 频后的方波信号的频率, 分频比由拨码开关 设置,并可以通过数码管显示测量频率 和分频比。当是偶数分配比时测量误差在正负1之 间,为奇数时误差较大。 module frequency_counter(clk_50M,HEX0,HEX1,HEX6,HEX7,reset_n,clk_test ,clk_1,freq_div,cnt_enb ,reset); input clk_50M,reset_n; input [3:0] freq_d iv; output clk_test,clk_1,cnt_enb,reset; output[6:0] HEX0,HEX1,HEX6,HEX7; wire [7:0] display_div; wire [7:0] out; assign reset=reset_n; 哈尔滨工业大学课程设计说明书(论文) //实例化各模块 clk50M_to_clk1 u1 (.clk_50M(clk_50M),.clk_1(clk_1),.reset_n(reset_n)); //直接 //间接 得到占空比50%的1Hz时钟 //clk_1Hz u1 (.clk_50M(clk_50M),.clk_1(clk_1),.reset(reset_n)); 得到占空比50%的1Hz时钟 user_clk (.clk_50M(clk_50M),.clk_test(clk_test),.freq_div(freq_div),. reset_n(reset_n)); u2 // 产 生对200Hz进行2 ̄15分频的占空比50%的方波 counter //频率计核心原理部分 c1 (.clk_test(clk_test),.clk_1(clk_1),.reset_n(reset_n),.q0(out[3:0]),.q 1(out[7:4]),.cnt _enb(cnt_enb)); decode47 .D3(out[3]),.D2(out[2]),.D1(out[1]),.D0(out[0])); //显示频率
pபைடு நூலகம்ge 1
//本模块由50M时钟分频产生占空比50%的1Hz时钟 module clk_1Hz(clk_50M,clk_1,reset); input clk_50M,reset; output clk_ 1; reg clk_1; reg clk_2; reg[25:0] count; always@(posedge clk_50M) begin i f (count ==24_999_999) begin clk_2 = 1'b1; count end else begin clk_2 = 1' b0; count = count+1; end end always@(posedge clk_2 or negedge reset) //由空 比非50%的2Hz时钟分频产生占空比50%的1Hz时钟 begin if (!reset) = 0; //count计 数终点 = f_in/f_out-1 = 50*10^6/2-1 //产生占空比非50%的2Hz时钟 哈尔滨工业大学课程设计说明书(论文) clk_1 = 1'b0; else clk_1 =  ̄ clk _1; end endmodule 方法二 //本模块由50M时钟分频直接产生占空比50%的1Hz时钟 module clk50M_to_clk1(clk_50M,clk_1,reset_n); input clk_50M,reset_n; output clk_1; reg [26:0]count; reg clk_1; always @(posedge clk_50M or nege dge reset_n) begin if(!reset_n) begin count<=0; clk_1<=0; end else if(coun t ==24_999_999) begin f_in/(2*f_out)-1 = 50*10^6/2-1=24999999 clk_1<= ̄clk_ 1; count<=0; end else count<=count+27'b1; // 占 空 比 50% 方 波 count 计 数 终 点 = //1Hz时钟 end endmodule 模块二 被测信号的分频获取 //本模块用于产生被测频率的方波,先分频产生2 00Hz频率方波,再由输入参数freq_div 决定对200Hz进行2 ̄15分频比的分频,从而产 生最后的被测方波 module user_clk(clk_50M,clk_test,freq_div,reset_n); input clk_50M; in put input [3:0] freq_div; reset_n; //被测方波 //输入分频参数 output clk_test; reg clk_test; reg clk_200Hz; reg [25:0] count; reg [ 3:0] cnt; wire [3:0] div; always@(posedge clk_50M) 哈尔滨工业大学课程设计说明书(论文) begin if (count =='d24_9999) //产 生占空比非50%的200Hz时钟 begin clk_200Hz <= 1'b1; count end else begin clk _200Hz <= 1'b0; count <= count+26'b1; end end /*always@(posedge clk_100Hz) begin clk_test<=  ̄ clk_test; end*/ assign div=(freq_div==4'b0) ? 1'b0 : / /已知分频比N,求cnt计数终点。由于产生方波,cnt //由N>>1来计算N/2,同时在N= 0 //对200Hz进行2 ̄15分频比的分频, <= 0; 计数终点=N/2-1 (freq_div==4'b1) ? 1'b0 : ((freq_div>>1)-1); 和1的情况,使cnt计数终点为零即2分频 always @(posedge clk_200Hz or negedge reset_n) begin 从而产生最后的被测方波 if(!reset_n) cnt<=0; else if(cnt==div) cnt<=0; clk_test<= ̄clk_test; e nd else cnt<=cnt+1'b1; end endmodule begin 模块三 频率计中计数与锁存部分的实现 //clk_1作为时基信号开启计数,clk_ test作为计数时钟 module counter(clk_test,clk_1,reset_n,q0,q1,cnt_enb); input clk_test, clk_1,reset_n; output [3:0] q0,q1; output cnt_enb; reg cnt_enb; reg [7:0] count; reg [7:0] out; 哈尔滨工业大学课程设计说明书(论文) always @(posedge clk_1 or negedg e reset_n) if(!reset_n) cnt_enb<=0; begin else cnt_enb<= ̄cnt_enb; //使能开启1S end always @(posedge clk_test or negedge reset_n) if(!reset_n ) count<=8'b0; else if((cnt_enb==1'b1)&&(cou nt[3:0]==4'b1001)) begin count[3:0]<=0; count[7:4]<=count[7:4]+1'b1; end e lse if(cnt_enb==1'b1) count[3:0]<=count[3:0]+1'b1; else //计数使能无效后,
本文由yirgui贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机 查看。 哈尔滨工业大学课程设计说明书(论文) 数字式频率计 设计任务 在 FPGA 实验板上,利用 FPGA 编程设计一个数字式频率计。 设计要 求与目的 1.利用实验板上的 50M 时钟分频作为被测输入信号;分频成 1Hz 作为时基信 号;(要 求在示波器上显示被测信号和时基信号) 2.数码管显示的频率范围为 00 ̄9 9Hz。 3.测量精度为±1Hz。 设计原理分析 1.频率是指单位时间(1s)内信号振动的次数。当被测信号在一定的时间段 Ts 内 的周期个 数为 N 时,则被测信号的频率: fx = N Ts 2.从测量的角度看,即单位时间测 得的被测信号的脉冲数。被测信号送入通 道 ,经放大整形后,使每个周期形成一个脉冲,用计数器计算脉冲的个数,即为频率。 如下图 1 所示: N Ts 图1 方案设计 由上述原理可以知道,要实现频率计,从硬件方面看,需要时基电路 、单稳 态触发器、放大整形电路、闸门电路、计数器、锁存器和译码显示器等。其硬件 结构图 如下图 2 所示: 译码显示 器 单稳态触发 器 C 单稳态触发 器 B 时基电 路 C 清零 锁存 锁存器 计数器 E 闸门电路 A 放大整形电 路 D 图 2 硬件结构图 而从数字电路时序的角度去分析,其时序图如下图 3 所示:
哈尔滨工业大学课程设计说明书(论文) 图 3 时序图 其中,A-被测信号;B-时基信号,秒脉冲;E-计数器计数脉冲信号 ;C-锁存器送数信 号;D-计数器清零信号。 当时基信号出现上升沿时,计数器开始 计数,计到时基信号下 降沿出现,计数器停止计数,此时锁存器送数信号出现上升沿 有效,给数码管送数,等 送数结束后,计数器出现一个上升沿对计数器清零。当下一 个时钟周期到来时,是一样 的过程。 频率计的输入输出关系如下表一所示: 表一 输入输出信号 输入 : clk1Hz uclk 输出: led0 led1 p_cnt_en p_rst_cnt p_loa d 频率值最低位 频率值次低位 计数允许(1 s) 复位计数器 锁存到寄存器中 基准时 钟输入 待测信号输入 哈尔滨工业大学课程设计说明书(论文) 图 4 FPGA 内部均衡逻辑图 方案优化与确定 在满足基础要求后,我们进行设计了的创新。首先,我们在逻 辑中采 用时序逻辑电路的编程方法,即在时基信号为"1"时闸门开启,自动开始计数, 下降沿来 时锁存数据并输出。为了增加频率计的实际应用功能,我们增设了手动分频 功能,即给 出一个 200HZ 的基础频率,通过拨动开关输入想要分频的倍数并显示在 LED 数码管上, 频率计即可自行计算出分频后的频率值。具体的实现方案将在下文 的程序中给出。 方案实现及程序 模块一 1Hz时基信号的分频 时基信号的分频 方法一