数控分频器的VerilogHDL设计
实验6 数控分频器的设计
![实验6 数控分频器的设计](https://img.taocdn.com/s3/m/83bd03d576a20029bd642d46.png)
实验6 数控分频器的设计(1)实验目的:学习数控分频器的设计、分析和测试方法。
(2)实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例6-20所示。
【例6-20】8位数控分频器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC);END ENTITY DVF;ARCHITECTURE one OF DVF ISSIGNAL FULL : STD_LOGIC;BEGINP_REG: PROCESS(CLK)VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK = '1' THENIF CNT8 = "11111111" THENCNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8FULL <= '1'; --同时使溢出标志信号FULL输出为高电平ELSE CNT8 := CNT8 + 1; --否则继续作加1计数FULL <= '0'; --且输出溢出标志信号FULL为低电平END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL)VARIABLE CNT2 : STD_LOGIC;BEGINIF FULL'EVENT AND FULL = '1' THENCNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = '1' THEN FOUT <= '1';ELSE FOUT <= '0';END IF;END IF;END PROCESS P_DIV;END ARCHITECTURE one;(3)分析:根据图6-21的波形提示,分析例6-20中的各语句功能、设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图。
实验三 数控分频器设计
![实验三 数控分频器设计](https://img.taocdn.com/s3/m/2a3657c19ec3d5bbfd0a743e.png)
实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2. 编制仿真测试文件,并进行功能仿真。
3. 下载并验证分频器功能【实验原理】数控分频器的功能是在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,对于一个N分频器,分频出的时钟周期是原时钟周期的N倍,频率变为原来的1/N。
对于一个8位计数器,如果输入数D,然后启动计数器工作,则经过D倍的时钟周期,计数器溢出时,输出pfull变为高电平,再以pfull为敏感信号,对fout进行取反操作,如此N=2D。
计数一次后,再重新计数,反复进行直至输入被赋予新值。
对于数控分频数器,装载不同的计数初始值时,会有不同频率的溢出信号,从而得到不同的输出。
数控分频器是利用计数值可并行预置的加法计数器设计完成的。
【程序源代码】(加注释)module FDIV(clk,fdiv,fout,pfull); //8位二进制的数控分频计input clk; //时钟信号input [7:0] fdiv; //8位加载数据output pfull; //定义一个1位的寄存器型中间控制变量output fout; //分频数据输出reg [7:0] Q; reg fout,full,pfull;always @(posedge clk) begin //clk有上升沿时,启动以下程序if(Q==fdiv) begin Q=0;full=1;end //若Q==fdiv,Q=0,full=1else begin Q=Q+1;full=0;end //若Q!=fdiv,Q累加1,full=0pfull=full;end //将full数据向pfull输出always @(posedge pfull)fout=~fout; //当pfull有上升沿时,对fout取反endmodule【RLT电路】【仿真和测试结果】功能分析:当输入fdiv为预置数“5”时,经过5倍的clk周期,pfull由低电平变为高电平;当pfull有上升沿时,对fout取反fout,因此fout的周期是clk的10倍,即完成对clk的10分频功能。
Verilog设计分频器(面试必看)
![Verilog设计分频器(面试必看)](https://img.taocdn.com/s3/m/9d78b4f70342a8956bec0975f46527d3240ca635.png)
Verilog设计分频器(⾯试必看)分频器是指使输出信号频率为输⼊信号频率整数分之⼀的电⼦电路。
在许多电⼦设备中如电⼦钟、频率合成器等,需要各种不同频率的信号协同⼯作,常⽤的⽅法是以稳定度⾼的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是⼀种主要变换⼿段。
早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(⼜称数字分频器)逐渐取代了正弦分频器。
下⾯以Verilog HDL 语⾔为基础介绍占空⽐为50%的分频器。
1、偶分频 偶分频电路指的是分频系数为 2、4、6、8 ... 等偶数整数的分频电路,我们可以直接进⾏分频。
例如下⾯ divider.v 中,对输⼊时钟进⾏6分频,即假设clk 为 50MHz ,分频后的时钟频率为 (50/6) MHz。
程序如下:设计代码:1//rtl2module divider(3 clk,4 rst_n,5 clk_div6 );7input clk;8input rst_n;9output clk_div;10reg clk_div;1112parameter NUM_DIV = 6;13reg [3:0] cnt;1415always @(posedge clk or negedge rst_n)16if(!rst_n) begin17 cnt <= 4'd0;18 clk_div <= 1'b0;19end20else if(cnt < NUM_DIV / 2 - 1) begin21 cnt <= cnt + 1'b1;22 clk_div <= clk_div;23end24else begin25 cnt <= 4'd0;26 clk_div <= ~clk_div;27end28endmoduleView Code仿真程序:1//tb2module divider_tb();3reg clk;4reg rst_n;5wire clk_div;6parameter DELY=100;7 divider U_divider(8 .clk (clk ),9 .rst_n (rst_n ),10 .clk_div(clk_div)11 );12always #(DELY/2) clk=~clk;//产⽣时钟波形13initial begin14 $fsdbDumpfile("divider_even.fsdb");15 $fsdbDumpvars(0,U_divider);16end17initial begin18 clk=0;rst_n=0;19 #DELY rst_n=1;20 #((DELY*20)) $finish;21end22endmoduleView Code可以看到,clk的上升沿,采样到cnt=2的时候,就翻转,采样到0和1的时候,保持。
实验六Verilog设计分频器计数器电路
![实验六Verilog设计分频器计数器电路](https://img.taocdn.com/s3/m/3e5d6bf90c22590102029d9d.png)
实验六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_fenpinq10yjq2、新建一个Verilog HDL文件3、输入程序:module fenpinqi10(clk,reset,clkout);input clk,reset;output clkout;reg clkout;reg[2:0] cnt;always @(posedge clk , negedge reset)beginif(!reset)begin clkout<=0;cnt<=0;endelse if(cnt==4)begin cnt<=0;clkout<=~clkout;endelse cnt<=cnt+1;endendmodule4、设置顶层实体名(点settings>general >下拉选fenpinqi10)5、编译6、执行file>Create/Update>Create Symbol Files for Current Flie为VHDI设计文件生成原件符号7、建立波形文件8、导入引脚9、仿真结果如下:总结:仿真结果与实验一的题意相符,所以仿真正确。
基于FPGA的通用数控分频器的设计与实现
![基于FPGA的通用数控分频器的设计与实现](https://img.taocdn.com/s3/m/192bb034bcd126fff7050bbf.png)
基于FPGA的通用数控分频器的设计与实现【摘要】本文首先介绍了各种分频器的实现原理,并在FPGA开发平台上通过VHDL文本输入和原理图输入相结合的方式,编程给出了仿真结果。
最后通过对各种分频的分析,利用层次化设计思想,综合设计出了一种基于FPGA的通用数控分频器,通过对可控端口的调节就能够实现不同倍数及占空比的分频器。
【关键词】FPGA;分频器;VHDL1.引言分频器是数字系统中非常重要的模块之一,被广泛应用于各种控制电路中。
在实际中,设计人员往往需要将一个标准的频率源通过分频技术以满足不同的需求。
常见的分频形式主要有:偶数分频、奇数分频、半整数分频、小数分频、分数分频。
在某些严格的情况下,还有占空比的要求。
其中非等占空比的偶数分频器和奇数分频器其实现比较容易,但对于半整数分频器和占空比为50%的奇数分频器实现比较困难。
本文首先介绍了各种分频器的实现原理,并结合VHDL硬件描述语言对其进行了仿真,最后提出一个可控的通用分频器的设计方法,该方法可实现任意分频,资源消耗低,具有可编程等优点。
2.偶数分频器偶数分频器比较简单,即利用计数器对需要分频的原始时钟信号进行计数翻转。
例如:要进行M=2N(N为自然数)分频,当计数值为0~k-1时,输出高电平,当计数值为k-1~2N-1时输出低电平,同时计数值复位,如此循环可实现任意占空比的偶数分频,其中M和k为预置数,可根据分频倍数和占空比的要求进行置数。
如图1所示,当k=N时,即可实现占空比为50%的偶数分频[1]。
图1 占空比为50%的4分频仿真结果图2 占空比为50%的5分频仿真结果3.奇数分频器任意占空比的奇数分频器的实现,其原理与偶数分频器类似。
但对于占空比为50%的任意奇数次分频却无法用上述相同的方法实现。
下面介绍一种常用的实现方法[4]。
实现原理:采用两个不同的边沿触发器(一个在上升沿和一个在下降沿)来实现,其细节在于实现1/2个原始时钟周期的时间差。
verilog 分频器,30s计数器及交通灯控制器设计
![verilog 分频器,30s计数器及交通灯控制器设计](https://img.taocdn.com/s3/m/4254534a336c1eb91a375d2a.png)
分频器module div(clk, div1,div2,div3);input clk;output div1;output div2;output div3;reg [31:0] counter1;reg [31:0] counter2;reg [31:0] counter3;reg div1;reg div2;reg div3;initial begindiv1=0;div2=0;div3=0;counter1=0;counter2=0;counter3=0;endalways @(posedge clk)begin/*if(counter1==2) counter1 <= 0;else counter1 <= counter1+1;if(counter2==3) counter2 <= 0;else counter2 <= counter2+1;if(counter3==4) counter3 <= 0;else counter3 <= counter3+1;*/ if(counter1==24999999) counter1 <= 0;else counter1 <= counter1+1;if(counter2==24999) counter2 <= 0;else counter2 <= counter2+1;if(counter3==12499999) counter3 <=0;else counter3 <= counter3+1;endalways @(posedge clk)begin/*if(counter1==2) div1 <= ~div1;if(counter2==3) div2 <= ~div2;if(counter3==4) div3 <= ~div3;*/if(counter1==24999999) div1 <= ~div1;if(counter2==24999) div2 <= ~div2;if(counter3==12499999) div3 <= ~div3;endendmodule30s计数器module count30(div1,number,direction );input div1;output [4:0] number;reg [4:0] number;reg direction;initialbegindirection=0;number=30;endalways@(posedge div1)beginif(number==0)begindirection<=~direction;number<=30;endelse number<=number-1;endendmodule控制器module moniter( div3,number,direction,eastred,eastyellow,eastgreen,northred,northyellow,northgreen );input div3;input direction;input [4:0]number;output eastred;output eastyellow;output eastgreen;output northred;output northyellow;output northgreen ;//wire [4:0] number;reg eastred;reg eastyellow;reg eastgreen;reg northred;reg northyellow;reg northgreen ;initial begineastred<=1;eastgreen<=0;northred<=1;northgreen<=0;northyellow<=eastyellow<=0;endalways @(posedge div3)beginif(number<=3)beginif (direction==0) eastyellow<=~eastyellow;else northyellow<=~northyellow;endelse begin eastyellow<=0;northyellow<=0;end endalways @(number )/*beginif(number==30&&direction==0)begin eastred<=1;eastgreen<=0;northred<=1;northgreen<=0;end*/if (number>2'b00010&&direction==0)begineastred<=0;eastgreen<=1;northred<=1;northgreen<=0;endelse if(number<3&&direction==0)begineastred<=0;eastgreen<=0;northred<=1;northgreen<=0;endelse if(number>2&&direction==1)begineastred<=1;eastgreen<=0;northred<=0;northgreen<=1;endelse if(number<3&&direction==1)begineastred<=1;eastgreen<=0;northred<=0;northgreen<=0;endendmodule译码器module yimaqi( clk,number,led1,led2);input clk;input [4:0] number;output [6:0] led1;output [6:0] led2;reg [6:0] led1;reg [6:0] led2;always @( number )begincase (number)5'b00000: begin led1 <= 7'b0000001; led2 <= 7'b0000001;end5'b00001: begin led1 <= 7'b0000001; led2 <= 7'b1001111;end5'b00010: begin led1 <= 7'b0000001; led2 <= 7'b0010010;end7'b0000110;end5'b00100: begin led1 <= 7'b0000001; led2 <= 7'b1001100;end5'b00101: begin led1 <= 7'b0000001; led2 <= 7'b0100100;end5'b00110: begin led1 <= 7'b0000001; led2 <= 7'b1100000;end5'b00111: begin led1 <= 7'b0000001; led2 <= 7'b0001111;end5'b01000: begin led1 <= 7'b0000001; led2 <= 7'b0000000;end5'b01001: begin led1 <= 7'b0000001; led2 <= 7'b0001100; end5'b01010: begin led1 <= 7'b1001111; led2 <= 7'b0000001;end5'b01011: begin led1 <= 7'b1001111; led2 <= 7'b1001111; end5'b01100: begin led1 <= 7'b1001111; led2 <= 7'b0010010;end5'b01101: begin led1 <= 7'b1001111; led2 <= 7'b0000110; end5'b01110: begin led1 <= 7'b1001111; led2 <= 7'b1001100;end5'b01111: begin led1 <= 7'b1001111; led2 <= 7'b0100100;end5'b10000: begin led1 <= 7'b1001111; led2 <= 7'b1100000;end5'b10001: begin led1 <= 7'b1001111; led2 <= 7'b0001111;end5'b10010: begin led1 <= 7'b1001111; led2 <= 7'b0000000;end5'b10011: begin led1 <= 7'b1001111; led2 <= 7'b0001100;end5'b10100: begin led1 <= 7'b0010010; led2 <= 7'b0000001;end5'b10101: begin led1 <= 7'b0010010; led2 <= 7'b1001111;end5'b10110: begin led1 <= 7'b0010010; led2 <= 7'b0010010;end5'b10111: begin led1 <= 7'b0010010; led2 <= 7'b0000110;end5'b11000: begin led1 <= 7'b0010010; led2 <= 7'b1001100;end7'b0100100;end5'b11010: begin led1 <= 7'b0010010; led2 <= 7'b1100000;end5'b11011: begin led1 <= 7'b0010010; led2 <= 7'b0001111;end5'b11100: begin led1 <= 7'b0010010; led2 <= 7'b0000000;end5'b11101: begin led1 <= 7'b0010010; led2 <= 7'b0001100;end5'b11110: begin led1 <= 7'b0000110; led2 <= 7'b0000001;enddefault: begin led1 <= 7'b0000000; led2 <= 7'b0000000;endendcaseendendmodulemodule dianzhen(direction,clk,div2,row,con);input div2;input clk;input direction;output[15:0] row;output[15:0] con;reg[15:0] row;reg[15:0] con;integer cnt,b;reg[15:0] r[48:0];initialbeginif (direction==0)begin// 丁r[0] <=16'b1111111111111111;r[1] <=16'b1011111111111111;r[2] <=16'b1011111111111111;r[3] <=16'b1011111111111111;r[4] <=16'b1011111111111111;r[5] <=16'b1011111111111011;r[6] <=16'b1011111111111101;r[7] <=16'b1000000000000011;r[8] <=16'b1011111111111111;r[9] <=16'b1011111111111111;r[10]<=16'b1011111111111111;r[11] <=16'b1011111111111111;r[12]<=16'b1011111111111111;r[13]<=16'b1011111111111111;r[14]<=16'b1011111111111111;r[15]<=16'b1111111111111111;// 乾r[16]<=16'b1101111111101111 ;r[17]<=16'b1101000000101111 ;r[18]<=16'b1101010101101111 ;r[19]<=16'b0000010101101111 ;r[20]<=16'b1101010100000000 ;r[21]<=16'b1101010101101111 ;r[22]<=16'b1101000000101111 ;r[23]<=16'b1101110111101111 ;r[24]<=16'b1111001111110011 ;r[25]<=16'b0000110111001101 ;r[26]<=16'b1010110110111101 ;r[27]<=16'b1110110101111101 ;r[28]<=16'b1110110011111101 ;r[29]<=16'b1110110111100001 ;r[30]<=16'b1110111111111011 ;r[31]<=16'b1111111111111111 ;// 全灭r[32]<=16'b1111111111111111;r[33]<=16'b1111111111111111;r[34]<=16'b1111111111111111;r[35]<=16'b1111111111111111;r[36]<=16'b1111111111111111;r[37]<=16'b1111111111111111;r[38]<=16'b1111111111111111;r[39]<=16'b1111111111111111;r[40]<=16'b1111111111111111;r[41]<=16'b1111111111111111;r[42]<=16'b1111111111111111;r[43]<=16'b1111111111111111;r[44]<=16'b1111111111111111;r[45]<=16'b1111111111111111;r[46]<=16'b1111111111111111;r[47]<=16'b1111111111111111;endelse if(direction==1)begin//1r[0] <=16'b 1111111111111111;r[1] <=16'b 1111111111111111;r[2] <=16'b 1111111111111111;r[3] <=16'b 1111111111111111;r[4] <=16'b 1111111111111111;r[5] <=16'b 1111011111111011;r[6] <=16'b 1111011111111011;r[7] <=16'b 1110000000000011;r[8] <=16'b 1111111111111011;r[9] <=16'b 1111111111111011;r[10]<=16'b 1111111111111111;r[11] <=16'b 1111111111111111;r[12]<=16'b 1111111111111111;r[13]<=16'b 1111111111111111;r[14]<=16'b 1111111111111111;r[15]<=16'b 1111111111111111;// 0r[16]<=16'b 1111111111111111;r[17]<=16'b 1111111111111111;r[18]<=16'b 1111111111111111;r[19]<=16'b 1111111111111111;r[20]<=16'b 1111111111111111;r[21]<=16'b 1111100000001111;r[22]<=16'b 1111011111110111;r[23]<=16'b 1110111111111011;r[24]<=16'b 1110111111111011;r[25]<=16'b 1111011111110111;r[26]<=16'b 1111100000001111;r[27]<=16'b 1111111111111111;r[28]<=16'b 1111111111111111;r[29]<=16'b 1111111111111111;r[30]<=16'b 1111111111111111;r[31]<=16'b 1111111111111111;// 9r[32]<=16'b 1111111111111111;r[33]<=16'b 1111111111111111;r[34]<=16'b 1111111111111111;r[35]<=16'b 1111111111111111;r[36]<=16'b 1111111111111111;r[37]<=16'b 1111100011111111;r[38]<=16'b 1111011101110011;r[39]<=16'b 1110111110111011;r[40]<=16'b 1110111110111011;r[41]<=16'b 1111011101110111;r[42]<=16'b 1111100000001111;r[43]<=16'b 1111111111111111;r[44]<=16'b 1111111111111111;r[45]<=16'b 1111111111111111;r[46]<=16'b 1111111111111111;r[47]<=16'b 1111111111111111;endendalways@(posedge clk )beginif (b==47)b<=0;else b<=b+1;endalways@(posedge div2)beginif(cnt==15)begincnt<=0;endelsecnt<=cnt+1;case(cnt)15: con<=16'b0000_0000_0000_0001; 14: con<=16'b0000_0000_0000_0010; 13: con<=16'b0000_0000_0000_0100; 12: con<=16'b0000_0000_0000_1000; 11: con<=16'b0000_0000_0001_0000; 10: con<=16'b0000_0000_0010_0000; 9: con<=16'b0000_0000_0100_0000; 8: con<=16'b0000_0000_1000_0000; 7: con<=16'b0000_0001_0000_0000; 6: con<=16'b0000_0010_0000_0000; 5: con<=16'b0000_0100_0000_0000; 4: con<=16'b0000_1000_0000_0000; 3: con<=16'b0001_0000_0000_0000; 2: con<=16'b0010_0000_0000_0000; 1: con<=16'b0100_0000_0000_0000; 0: con<=16'b1000_0000_0000_0000;endcasecase(cnt)0: row<=r[b+0];1: row<=r[b+1];2: row<=r[b+2];3: row<=r[b+3];4: row<=r[b+4];5: row<=r[b+5];6: row<=r[b+6];7: row<=r[b+7];8: row<=r[b+8];9: row<=r[b+9];10: row<=r[b+10];11: row<=r[b+11];12: row<=r[b+12];13: row<=r[b+13];14: row<=r[b+14];15: row<=r[b+15];endcaseendendmodule。
数控分频器的VerilogHDL设计
![数控分频器的VerilogHDL设计](https://img.taocdn.com/s3/m/43f6ad07a2161479171128d8.png)
附表1:
广州大学学生实验报告
开课学院及实验室:物理与电子工程学院-电子楼317室2016年 5 月 5 日
if (!RST) begin Q1<=0; FULL<=0; end
else if (LD) begin Q1<=D; FULL<=1; end
else begin Q1<=Q1+1; FULL <=0; end
assign LD=(Q1==4'B0000);
assign PM=FULL;
assign DOUT=Q1;
endmodule
四、仿真结果:
由波形图可见,当RST为低电平时,LD置位,装载预置数5(0101);当计满值为0000(图中DOUT:1111后的一小段),LD置位并输出一次脉冲PM,然后加载预置数,继续计数。
五、引脚锁定:
六、硬件测试结果:
下载程序到目标机
注:键4-键1为设置预置数
七、实验心得:
通过本次实验,使我明白了数控分频器的工作原理,并通过蜂鸣器直观地对比了不同的分频效果。
巩固了理论知识和实验流程,提高了效率,为后续实验打下良好的基础。
项目名称”栏以上部分统一。
用Verilog+HDL语言设计分频器和32位计数器
![用Verilog+HDL语言设计分频器和32位计数器](https://img.taocdn.com/s3/m/ea7a941ca300a6c30c229f16.png)
i<i+1l
end
cs)∥有片选信号
end endrnodule
begin if(addr)
aceuh<2data}
该模块已通过软件仿真,符合设计要求。并已将程序下载到FPGA芯片,在电路板上与 系统进行联调,已证明设计达到预期功能,正式投入使用。
参 考 文 献
1夏宇闻.复杂数字电路与系统的VerilogHDL设计技术.北京t北京航空航天大学出版杜,1999.1—86 2阎石鼓字电子技术基础.北京:高等教育出版社.1 997.224--295 3束万焘·罗 车,吴顺军.CPI,D技术及其盥用西安:西安电子科技大学出版社,1999.30】oo
end end
output
elkl.c}//输出时钟和计数进位信号
j
wirte[15
reg
பைடு நூலகம்
O]data—reg·dataI
c,clkl{
if(i>=119) 计数值的高16位数和低
begin
∥对输人时钟进行J20分频
reg[1 5:O]aceub.aecul;
1
6位数
j<=0; clkl<=~clkl;
第23卷第6期 2002年1 1月
微计算机应用
MICROCOMPUTER APPLICATIONS
Vol
23.N。.6
Nov-,2002
用Ver|log
HDL语言设计分频器和32位计数器
谈艳云 罗志强
100083)
仍局
(北京航空航天大学电子工程东北京
擅要t介绍一种软件实现分频器和32位计数器的设计思路.即采用大规模可编程逻辑芯片.
+PLUS
II仿真正是一种实用的EDA软件,它具有原理图输入和文本输入(采用硬件描述语
Verilog语言实现5分频电路的设计
![Verilog语言实现5分频电路的设计](https://img.taocdn.com/s3/m/a96cf708f011f18583d049649b6648d7c0c70844.png)
Verilog语言实现5分频电路的设计1.行为建模方法:使用行为建模方法,可以通过描述电路的功能行为来实现5分频电路。
以下是使用Verilog语言进行行为建模的代码示例:```verilogmodule DivideBy5input wire clk,output wire clk_outreg [2:0] counter;counter <= 0;clk_out <= ~clk_out;end else begincounter <= counter + 1;endendendmodule```在该示例中,定义了一个模块`DivideBy5`,包含一个输入端口`clk`和一个输出端口`clk_out`,分别用于输入时钟信号和输出分频后的时钟信号。
`reg [2:0] counter`是一个3位的寄存器,用于计数。
当计数达到5时,即计数器的值为5,会将`counter`复位为0,并将输出时钟信号`clk_out`取反。
否则,计数器的值会自增12.结构建模方法:使用结构建模方法,可以通过组合和顺序电路的连接方式来实现5分频电路。
以下是使用Verilog语言进行结构建模的代码示例:```verilogmodule DivideBy5input wire clk,output wire clk_outwire clk_out_2;wire clk_out_3;wire clk_out_4;DivideBy2 div_by_2 ( .clk(clk), .clk_out(clk_out_2) );DivideBy2 div_by_3 ( .clk(clk_out_2), .clk_out(clk_out_3) );DivideBy2 div_by_4 ( .clk(clk_out_3), .clk_out(clk_out_4) );DivideBy2 div_by_5 ( .clk(clk_out_4), .clk_out(clk_out) );endmodulemodule DivideBy2input wire clk,output wire clk_outreg clk_out;clk_out <= ~clk_out;endendmodule```在该示例中,定义了两个模块`DivideBy5`和`DivideBy2`。
课程设计---基于Verilog HDL数字频率计设计与实现
![课程设计---基于Verilog HDL数字频率计设计与实现](https://img.taocdn.com/s3/m/c556647acaaedd3383c4d3ec.png)
基于Verilog HDL数字频率计设计与实现课程设计任务书学院:计算机与通信工程学院专业:网络工程专业指导教师对学生在课程设计中的评价指导教师对课程设计的评定意见基于Verilog HDL数字频率计设计与实现摘要:在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。
直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。
本文阐述了用Verilog HDL语言设计了一个简单的数字频率计的过程关键词:周期;EDA;Verilog HDL;数字频率计;波形仿真目录1 引言......................................................... - 5 -1.1 数字频率计概述.......................................... - 5 -1.2 频率测量的思想和方法.................................... - 6 -2 Verilog HDL简介............................................. - 9 -2.1 Verilog HDL的简介....................................... - 9 -3 数字频率计系统框图.......................................... - 10 -3.1数字频率计系统框图...................................... - 10 -3.2数字频率计系统部件简介.................................. - 10 -4 基于Verilog HDL数字频率计程序设计.......................... - 11 -4.1数字频率计系统模块划分结构.............................. - 11 -4.2计数模块counter ........................................ - 12 -4.3门控模块gate_control ................................... - 15 -4.4分频模块fdiv ........................................... - 18 -4.5 寄存器模块flip_latch ................................... - 20 -4.6 多路选择模块data_mux ................................... - 22 -4.7 动态位选模块dispselect ................................. - 23 -4.8 BCD译码模块dispdecoder ................................ - 25 -4.9 顶层电路top ............................................ - 28 -5 总结........................................................ - 31 - 参考文献....................................................... - 32 -1 引言在电子测量领域中,频率测量的精确度是最高的,可达10—10E-13数量级。
实验二 数控分频器
![实验二 数控分频器](https://img.taocdn.com/s3/m/3a882a03581b6bd97f19ea68.png)
实验二数控分频器一、实验目的1.掌握数控分频器的工作原理并能够用verilog语言编写代码,熟悉EDA6000实验箱的使用方法。
2.进一步熟悉quartusII建立程序编译、仿真及下载的操作流程并学会数控分频器的Verilog硬件设计二、实验步骤1.新建Verilog工程项目,编写代码并保存至与模块名对应的项目文件夹。
2.编译程序,编译无误后,在【tools】里面选择RTL视图,观察电路结构。
3.新建波形文件进行仿真。
保存时要和源程序存放在同一目录下。
设置好输入波形参数后,开始仿真。
在仿真后输入输出波形中观察逻辑关系是否正确。
4.将实验箱和PC合理连接起来。
打开EDA6000软件,设置好芯片类型为ACEX1K(EP1K30TC144-3),载入模式9。
5.根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSⅡ里面设定管脚号并检查无误。
6.将程序下载至FPGA试验箱内,并在EDA6000软件界面内进行验证测试。
程序代码module divf(clk,din,pfull,clkout);input clk;input [7:0] din;output clkout,pfull;reg full,divclk;reg [7:0] count;always @(posedge clk) beginif(count==8'HFF) begincount<=din;full<=1; endelse if(count<255) begincount<=count+8'B1;full<=0; endendalways @(posedge full) begindivclk<=~divclk; endassign clkout=divclk;assign pfull=full;endmoduleRTL仿真设置根据试验箱指定管脚连接下载至EDA6000实验箱逻辑分析结果三、实验总结通过实验,我初步掌握了分频计数器类型模块的Verilog描述方法及层次化设计方法。
Verilog分频器设计
![Verilog分频器设计](https://img.taocdn.com/s3/m/c6e03b8771fe910ef12df88b.png)
Verilog分频器设计module adder(clk,z);output z;reg q;reg z;always@(posedge clk)beginif(q%9==0)z<=q;elseq=q+1;endendmodulemodule counter9(clk,datein,z); output z;input clk;input datein;reg z;reg[3:0] q;always@(posedge clk)beginq<=q+1;if (q==4'b1001)beginq<=4'b0000;z<=datein;endendendmodule2008-11-04 19:58分频器是FPGA设计中使用频率非常高的基本单元之一。
尽管目前在大部分设计中还广泛使用集成锁相环(如altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太严格的设计,通过自主设计进行时钟分频的实现方法仍然非常流行。
首先这种方法可以节省锁相环资源,再者,这种方式只消耗不多的逻辑单元就可以达到对时钟操作的目的。
偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。
如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。
以此循环下去。
这种方法可以实现任意的偶数分频。
module odd_division(clk,rst,count,clk_odd); /*count没必要放在端口中,这里只是为了仿真时观察*/input clk,rst;output clk_odd;output[3:0] count;reg clk_odd;reg[3:0] count;parameter N = 6; /*6分频* /always @ (posedge clk)if(! rst)begincount <= 1'b0;clk_odd <= 1'b0;endelseif ( count < N/2-1)begincount <= count + 1'b1;endelsebegincount <= 1'b0;clk_odd <= ~clk_odd;endendmodule奇数倍分频:归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数从零开始,到N-1)/2进行输出时钟翻转,然后经过(N+1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。
远程FPGA虚拟实验平台用SystemVerilogHDL实现计数器和分频器
![远程FPGA虚拟实验平台用SystemVerilogHDL实现计数器和分频器](https://img.taocdn.com/s3/m/d8b9f6a664ce0508763231126edb6f1aff007180.png)
远程FPGA虚拟实验平台⽤SystemVerilogHDL实现计数器和分频器远程FPGA虚拟实验平台⽤SystemVerilog HDL实现计数器和分频器原理计数器本实验中,材料给出的计数器是⼆进制来分频的,就搞得还挺⿇烦。
/** The input port is replaced with an internal signal **/wire reset =PB[0];wire clk;/************* The logic of this experiment *************/logic [23:0] count;always@(posedge CLOCK or posedge reset)beginif(reset)count <=0;elsecount <= count+1;endassign clk = count[22];//2^23,详解见下⽅logic [7:0]q;always @ (posedge clk or posedge reset)if(reset)q <=1;elseq <={q[6:0], q[7]};/****** Internal signal assignment to output port *******/assign L[7:0]= q[7:0];endmodule由代码可知,在CLOCK输出2个信号后,clk=1,然后CLOCK需要再输出2个信号,使clk=0。
这个过程的时间是2(次)/10M(次/秒),约为838毫秒。
测试界⾯的刷新间隔T实际上是,每隔T时间显⽰⼀下虚拟实验⾯板当前的情况,如果在测试时刷新间隔T=1000ms,会使得刷新不完全按照分频器转换后的频率来,所以刷着刷着就跳过了某⼏次,这个“某⼏次”是可以算的,但是我懒得算。
也就是说,只要刷新间隔T<=838ms就能让每个灯都亮了,但是如果不是838的倍数,灯亮的时候就不匀速,有点抽风。
通用的Verilog HDL 奇数偶数分频器
![通用的Verilog HDL 奇数偶数分频器](https://img.taocdn.com/s3/m/1644aa727fd5360cba1adbed.png)
基于Verilog HDL的分频器设计Verilog HDL的分频器设计作者:nyj文中的第一个模块为通用的偶分频模块,第二个模块为通用的奇分频模块,2个模块分频占空比都为1:1,使用时只需将相应模块中parameter DIV_N = N; 中的N改为想要的分频数即可。
/**********************************************File name: Divide_Frequency_module**Author: nyj**Version:**Data: 11/7/17**Description: Even divide FPGA CLK frequency**********************************************/module Divide_Frequency_module(input CLK_In,input RSTn,output CLK_Out);/*****************************************/parameter DIV_N = N;/***********************************************/reg [DIV_N:0] count;reg clk_N;always @ ( posedge CLK_In or negedge RSTn )beginif(!RSTn)begincount <= 1'b0;clk_N <= 1'b0;endelse if( count == DIV_N/2 - 1'b1)begincount <= 1'b0;clk_N <= ~clk_N;elsecount <= count + 1'b1;end/***********************************************/ assign CLK_Out = clk_N;/*************************************************/ endmodulemodule Divide_Frequency_module(input CLK_In,input RSTn,output CLK_Out);/*****************************************/ parameter DIV_N = N;/***********************************************/ reg [DIV_N:0] count_p;always @ ( posedge CLK_In or negedge RSTn )beginif(!RSTn)count_p <= 1'b0;else if( count_p == DIV_N - 1'b1)count_p <= 1'b0;elsecount_p <= count_p + 1'b1;end/***********************************************/ reg [DIV_N:0] count_n;always @ ( negedge CLK_In or negedge RSTn)if(!RSTn)count_n <= 1'b0;else if(count_n == DIV_N - 1'b1)count_n <= 1'b0;elsecount_n <= count_n + 1'b1;end/************************************************/ reg clk_N_p;always @ ( posedge CLK_In or negedge RSTn )beginif(!RSTn)clk_N_p <= 1'b0;else if(count_p <= DIV_N/2)clk_N_p <= 1'b1;elseclk_N_p <= 1'b0;end/***********************************************/reg clk_N_n;always @ ( negedge CLK_In or negedge RSTn )beginif(!RSTn)clk_N_n <= 1'b0;else if(count_n <= DIV_N/2)clk_N_n <= 1'b1;elseclk_N_n <= 1'b0;end/***************************************************/ assign CLK_Out = (clk_N_p & clk_N_n) ? 1'b1 : 1'b0;/*************************************************/ endmodule。
数控分频器的设计
![数控分频器的设计](https://img.taocdn.com/s3/m/803bd470dd3383c4ba4cd232.png)
数控分频器的设计一、实验目的:学习数控分频器的设计和测试方法。
二、实验原理:数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。
该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。
用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。
电路输出波形图:三、实验内容:1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。
------------------------------------------------------------------------------------------------------------- 原理图:数控分频器输出频率与输入时钟的关系:当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
a任意小数都可以表示成n?形式,其中ab脉冲数为P,则有以下关系:a???nb?a?M??n???P????Pbb?????n?b?a???n?1?a? ????Pb??上式表明分频器进行b次n分频时,设法多输入a个脉冲。
或者说在b个脉冲输入周期中,进行b-a次n分频和a次n+1分频。
这就是小数分频的基本原理。
n和n+1也称为分频模式。
利用上述小数分频的方法,同样也可以实现整数分频,即令a=0,就可以完成整数N分频2)编写实现数控分频器的VHDL程序。
要求输出信号的占空比尽量为50%。
--------------------------------------------------------------------------- 程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT(CLK:IN STD_LOGIC;D:STD_LOGIC_VECTOR(3STD_LOGIC); END;ARCHITECTURE one OF DVF IS SIGNAL FULL:STD_LOGIC; BEGINP_REG:PROCESS(CLK)VARIABLE CNT4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF CLK'EVENT AND CLK='1' THEN IF CNT4=\CNT4:=D; FULL<='1';ELSE CNT4:=CNT4+1; FULL<='0'; END IF; END IF;END PROCESS P_REG; P_DIV:PROCESS(FULL) VARIABLE CNT2:STD_LOGIC; BEGINDOWNTO0);FOUT:OUTIF FULL'EVENT AND FULL='1' THEN CNT2:=NOT CNT2;IF CNT2='1' THEN FOUT<='1'; ELSE FOUT<='0'; END IF; END IF;END PROCESS P_DIV; END;仿真波形:管脚锁定:信号旧试验箱管脚号连接的器件 clk 43 Clk1 D(3) 30 SW1 D(2) 35 SW2 D(1) 36 SW3 D(0) 37 SW4 Fout 29 LED12新试验箱No.5 管脚号连接的器件 28 CLK0 233 SW1 234 SW2 235 SW3 236 SW4 12 LED8感谢您的阅读,祝您生活愉快。
基于Verilog HDL数字频率计的设计
![基于Verilog HDL数字频率计的设计](https://img.taocdn.com/s3/m/b6cbac41cf84b9d528ea7ad8.png)
EDA设计课程论文题目基于Verilog HDL数字频率计的设计学院通信学院专业班级学生姓名大彬哥指导教师大陆会2013年5月17日EDA设计基础实验论文摘要频率是常用的物理量, 在实际测量过程中总是尽可能地把被测参量转换成频率参量进行测量。
例如工程中用振弦式方法测量力、时间测量、速度控制等, 都可转化为频率测量。
随着科学技术与计算机应用的不断发展, 以单片机作为核心的测量控制系统层出不穷。
在被测信号中, 较多的是模拟和数字开关信号, 此外还经常遇到以频率为参数的测量信号, 例如流量、转速、晶体压力传感器以及经过参变量一频率转换后的信号等等。
因此, 频率测量是电子测量技术中最基本的测量之一。
电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。
直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。
本文运用现代电子设计工具, 采用V er ilogHDL语言在CPLD器件上实现了简易数字频率计的设计。
在10Hz ~ 100MHz 频率测量范围内, 该频率计能根据输入被测频率信号, 自动调整测试量程进行测试并给出测试结果的BCD 码及七段LED 译码显示。
具有体积小、可靠性高、功耗低的特点。
关键词:数字频率计 Verilog_HDL 分频计数IEDA设计基础实验论文AbstractFrequency is a common physical quantities, in actual measurement process is always possible, the measured parameters are converted into the frequency parameter measurement. For example, engineering with vibrating method for measuring force, measurement of time, velocity control, can all be converted into frequency measurement. With the development of science and technology and the continuous development of computer applications, to single-chip microcomputer as the core control system for measuring the emerge in an endless stream. In the measured signal, more is analog and digital switch signal, in addition also frequently encountered with a frequency parameter measurement signal, such as flow rate, rotational speed, crystal pressure sensor and the variable frequency converted signal and so on. Therefore, the frequency measurement is the electronic measurement technology in the most fundamental measurement of.Electronic counter frequency measurement in two ways : one is the direct frequency measurement Law, or within a certain time gates of measured signal pulse number; two is the indirect frequency measurement Law, such as cycle frequency measurement method. Direct frequency measurement Law is applicable to the high frequency signal frequency measurement, indirect frequency measurement Law is applicable to low-frequency signals in the frequency measurement. The use of modern electronic design tool, using V Er ilogHDL language in CPLD device achieves simple digital frequency meter design. In the10Hz100MHz frequency measurement range, the frequency meter according to input the measured frequency signal, automatic adjustment and test range tested and the test results are given in the BCD code and the seven LED decoding display. Has the advantages of small volume, high reliability, low power consumption.Keywords: digital frequency meter Verilog_HDL frequency countingIIEDA设计基础实验论文目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1数字频率计概况 (1)1.2本文研究内容 (1)1.3目的与意义 (2)第2章系统设计方案 (3)2.1数字频率计总体设计方案 (3)2.1.1 放大整形 (3)2.1.2 SW1、SW2、SW3按键 (3)2.1.3 标准时钟 (3)2.1.4 LED显示模块 (3)2.2系统的参数 (4)2.2.1 频率测量 (4)2.2.2 频率测量方法 (4)2.2.3 功能及技术指标 (4)第3章数字频率计的基本原理 (6)3.1计数模块COUNTER (6)3.2门控模块GATE_CONTROL (6)3.3分频模块FDIV (7)3.4寄存器模块FLIP_LATCH (7)3.5多路选择模块DATA_MUX (8)3.6动态位选模块DISPSELECT (9)3.7BCD译码模块DISPDECODER (11)第4章数字频率计软件设计 (15)4.1软件实现功能综述 (15)4.2多路选择模块DATA_MUX的设计 (15)4.2.1 多路选择模块data_mux的接口电路 (15)4.2.2 多路选择模块data_mux程序设计 (16)4.3动态位选模块DISPSELECT的设计 (17)4.3.1 动态位选模块dispselec的接口电路 (17)4.3.2 动态位选模块dispselec的程序设计 (17)IIIEDA设计基础实验论文4.4BCD译码模块DISPDECODER的设计 (18)4.4.1 BCD译码模块dispdecoder的接口电路 (18)4.4.2 BCD译码模块dispdecoder的程序设计 (19)第5章数字频率计系统的仿真分析 (23)5.1系统原理图 (23)5.2多路选择模块DATA_MUX的仿真分析 (24)5.3动态位选模块DISPSELEC的仿真分析 (25)5.4BCD译码模块DISPDECODER的仿真分析 (25)5.5软硬件调试 (26)结论 (28)参考文献 (29)IVEDA设计基础实验论文第1章绪论1.1数字频率计概况频率是常用的物理量, 在实际测量过程中总是尽可能地把被测参量转换成频率参量进行测量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附表1:
广州大学学生实验报告
开课学院及实验室:物理与电子工程学院-电子楼317室2016年 5 月 5 日
if (!RST) begin Q1<=0; FULL<=0; end
else if (LD) begin Q1<=D; FULL<=1; end
else begin Q1<=Q1+1; FULL <=0; end
assign LD=(Q1==4'B0000);
assign PM=FULL;
assign DOUT=Q1;
endmodule
四、仿真结果:
由波形图可见,当RST为低电平时,LD置位,装载预置数5(0101);当计满值为0000(图中DOUT:1111后的一小段),LD置位并输出一次脉冲PM,然后加载预置数,继续计数。
五、引脚锁定:
六、硬件测试结果:
下载程序到目标机
注:键4-键1为设置预置数
七、实验心得:
通过本次实验,使我明白了数控分频器的工作原理,并通过蜂鸣器直观地对比了不同的分频效果。
巩固了理论知识和实验流程,提高了效率,为后续实验打下良好的基础。
项目名称”栏以上部分统一。