verilog 奇数分频设计

module tw(clk,k_or,k1,k2);

input clk;

output k_or,k1,k2;

reg [2:0] c1,c2;

reg m1,m2;

initial

begin

c1=0;

c2=0;

m1=0;

m2=0;

end

always @(posedge clk)

begin

if(c1==a) c1<=0;else c1<=c1+1;

if(c1==1) m1=~m1;else if(c1==b) m1=~m1;end

always @(negedge clk)

begin

if(c2==a) c2<=0;else c2<=c2+1;

if(c2==1) m2=~m2;else if(c2==b) m2=~m2;end

assign k1=m1;

assign k2=m2;

assign k_or=m1|m2;

endmodule

分频系数,则采用如下公式

a=n-1;

b=n-2;

n为分频系数。

时间: 2024-11-05 19:32:07

verilog 奇数分频设计的相关文章

基于verilog的分频器设计(奇偶分频原理及其电路实现:上)

在一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率太高)进行分频.分频器主要分为奇数分频,偶数分频,半整数分频和小数分频,在对时钟要求不是很严格的FPGA系统中,分频器通常都是通过计数器的循环来实现的. 偶数分频:假设为N分频,由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数.以此循环下去.这种方法可以实现任意的偶数分频.如图所示,两个D触发器级联实现四分频电路,原理:来一个

FPGA三分频,五分频,奇数分频

我们在做FPGA设计时,有时会用到时钟频率奇数分频的频率,例如笔者FPGA的晶振为50M,当我们需要10M的时钟时,一种方式可以使用DCM或PLL获取,系统会内部分频到10M,但其实VERILOG内部也完全能实现,所以我们还是来了解一下. 有这样一个欢乐的时钟了,我们要得到以下的分频效果: 奇数分频的难点就在于,三分频要求1.5倍的时钟时间翻转一次,这样整体的周期时间是原来的3倍,即三分频.五分频亦类似.而恰恰verilog不允许你在两个always模块里对同一reg赋值. 那怎么得到三分频的时

奇数分频

奇数分频思路:(结合图示进行理解) 第一步:在时钟的上升沿和下降沿分别产生一个计数器.cnt_up 在时钟上升沿计数,cnt_down 在时钟下降沿计数(例:如果是 N 分频,就从0计数到 N-1) 第二步:根据这两个计数器产生两个控制信号 clk_up , clk_down. 注意:clk_up 和 clk_down 的高低电平的比例是有规律的. 如果是N分频,比例为 N/2 : N/2+1 或者  N/2+1 : N/2 如果是3分频,那么比例就是 1:2 或者 2:1. 如果是5分频,比例

Verilog代码可移植性设计(转自特权同学博客http://bbs.ednchina.com/BLOG_ARTICLE_1983188.HTM)

最近开始学习FPGA,之前项目中仅用过parameter,在CrazyBingo的<FPGA设计技巧与案例开发例程详解>中看到使用localparam,以及在366页中简单介绍了下‘define,parameter和localparam的区别.查找特权同学博客发现其曾经讲诉过.文中红色阴影处为文中错误. Verilog代码可移植性设计 1.       参数定义 localparam,实例代码如下: module tm1( clk,rst_n, pout ); input clk; input

8421BCD转余3码Verilog HDL的设计(2)

接着上节8421BCD转余3码Verilog HDL的设计(1),分析另一条路径A-C分支 (1)在C状态,t1时刻Bin输入的值可能为0或者1:当bin输入0时,进入F状态:当bin输入1时,进入G状态,比特流Bin二进制为t3t2t1t0的可能性如下: C状态(t1时刻,Bin=0),Bout=0 C状态(t1时刻,Bin=1),Bout=1 t3t2t1t0 T3T2T1T0 下一状态为F状态 t3t2t1t0 T3T2T1T0 下一状态为G状态 0001 0100 0011 0110 0

基于verilog的分频器设计(半整数分频,小数分频:下)

半整数分频器:计数器是通过上升沿触发,故在计数为N-1时对计数触发进行翻转,时钟的下降沿变为上升沿,因此计数值为0,所以每产生n+0.5分频时钟的周期,触发时钟都要翻转一次.如图所示,采用异或门和2分频模块设计脉冲扣除电路,脉冲扣除是输入频率和2分频输出相异或的结果. module fenpin(clk,rst_n,clk_out); input clk; input rst_n; output clk_out; reg clk_out2; wire clk_out1; reg [1:0] cn

Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则

因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机).建议采用case语句来建立状态机的模型,因为这些语句表达清晰明了,可以方便的由当前状态转向下一个状态并设置输出.记得:不要忘记在case语句的最后写上default分支,并将状态设置为'bx这就等于告诉综合器case语句已经指定了所有的状态.这样综合器就可以删除不必要的译码电路使生成

Verilog学习笔记设计和验证篇(五)...............层次化事件队列

详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为用于当前仿真事件的4个不同队列,和用于下一段仿真事件的若干个附加队列: 1)动态事件队列(下列事件队列的执行顺序可以随意安排) a)阻塞赋值 b)计算非阻塞赋值的RHS  c)连续赋值  d)执行$display命令  e)计算原语的输入输出变化 2)停止运行的事件队列: #0延时阻塞赋值 3)非阻

verilog乘法器的设计

在verilog编程中,常数与寄存器变量的乘法综合出来的电路不同于寄存器变量乘以寄存器变量的综合电路.知乎里的解释非常好https://www.zhihu.com/question/45554104,总结乘法器模块的实现https://blog.csdn.net/yf210yf/article/details/70156855 乘法的实现是移位求和的过程 乘法器模块的实现主要有以下三种方法 1.串行实现方法 占用资源最多,需要的时钟频率高些,但是数据吞吐量却不大 两个N位二进制数x.y的乘积用简