求基于Quartus II的奇数分频器源程序

求基于Quartus II的奇数分频器源程序,第1张

//任意奇数分频器,只需要将n改为你想要的奇数即可。

module any_odd_div (clkdiv,clk)

output clkdiv  //输出分频信号

 input clk      //时钟信号

 reg[2:0]cnt1,cnt2//计数或蠢器1,计数器2

 reg clk_temp1,clk_temp2

 parameter n = 7  //7分频

 

 always @(posedge clk)

 begin

  if(cnt1 == n-1)

   begin cnt1 <=3'b000end

  else

   begin cnt1 <= cnt1 +1'b1end

  if(cnt1 ==3'b000)

   begin clk_temp1 =1'b1end

  if(cnt1 ==(n-1)/2)

   begin clk_temp1 =0end

 end

 

 always @(negedge clk)

 begin

  if(cnt2 == n-1)

   begin cnt2 <=3'b000end

  else

   begin cnt2 <=cnt2 +1'b1end

  if(cnt2 ==3'b000)

   begin clk_temp2 =1end

  if(cnt2 ==(n-1)/2)

   begin clk_temp2 =0end

 end

 

 assign clkdiv = clk_temp1 | clk_temp2

 宽团帆

 endmodule

补充一下,如果是大于7的奇数分频情况,不仅需要改变分频参数n,同时还需要将慎雹寄存器的位数按分频数作相应的调整。

library ieee

use ieee.std_logic_1164.all

use ieee.std_logic_arith.all

use ieee.std_logic_unsigned.all

entity fenpin is

port(clk_in: in std_logicclk_out: out std_logic)

end fenpin

--使用第派枣一种方案

architecture a of fenpin is

signal clk_outQ: std_logic := '0'--赋初始值仅供仿真猜桥使用

signal countQ: integer range 0 to 12500

begin

process(clk_in)

begin

if(clk_in'event and clk_in = '1') then

if(countQ /= 12500) then

CountQ <= CountQ + 1

else

clk_outQ <= not clk_outQ

CountQ <= 0

end if

end if

end process

clk_out <= clk_outQ

end a

--使用第二种方案

architecture b of fenpin is

signal countQ: integer range 0 to 25000

begin

process(clk_in)

begin

if(clk_in'event and clk_in = '1') then

if(countQ <25000) then

countQ <= countQ + 1

else

CountQ <= 0

end if

end if

end process

process(countQ)

begin

if(countQ <12500) then

clk_out <= '0'

else

clk_out <穗羡猛= '1'

end if

end process

end b

configuration cfg of fenpin is

for a --修改成“b”即使用第二种方案

end for

end cfg

首先要将D触发器接成T'触发器,信号接clk,这D触发器就成二分频电路。接下来只需用重复上述动作再接一级就是四分频电路。

四分频需要通过有分频作用的电路结构,在时钟每触发4个周期时,电路输出1个周期信号。比如用一个脉冲时闷码穗钟触发一个计数器,计数器每计4个数就清零一次并输出1个脉冲。那么这个电路就实现了四分频功能。

Veriloghdl用d触发器实现4分频的程序:

moduledff_4(clk,rst,clk_out)

inputclk,rst

outputclk_out

wireclk,rst

regclk_out

regq1,q2

always@(posedgeclkornegedgerst)

if(!rst)

begin

q1<=1'b0

end

else

begin

q1<=~q1

end

always@(posedgeq1ornegedgerst)

if(!rst)

begin

q2<=1'b0

clk_out<=1'b0

end

else

begin

q2<=~q2

clk_out<=q2

end

扩展资料

D触发器的工作原理:

1)CP=0时,与非门G3和G4封锁,其输出Q3=Q4=1,触发器的状态不变。同时,由于Q3至Q5和Q4至Q6的反馈信号将这两个门打开,因此可接收输入信号D,Q5=D,Q6=Q5非=D非。

2)当CP由0变1时触发器翻转。这时G3和G4打开,它们的输入Q3和Q4的状态由G5和G6的输出状态决定。模举Q3=Q5非=D非,Q4=Q6非=D。由基本RS触发器的逻辑功能可知,Q=Q3非=D。

3)触发器翻转后,在CP=1时输入信号被封锁。这是因为G3和G4打开后,它们的输出Q3和Q4的状态是互补的,即必定有一个是0,若Q3为0,则经G3输出至G5输入的反馈线将G5封锁,即封锁了D通往基本RS触发器的路径。

该反馈线起到了使触发器维持在1状态和阻止触发器变为0状态的作用,故该反馈线称为置1维持线,置0阻塞线。蚂卜Q4为0时,将G3和G6封锁,D端通往基本RS触发器的路径也被封锁。Q4输出端至G6反馈线起到使触发器维持在0状态的作用,称作置0维持线。

Q4输出至G3输入的反馈线起到阻止触发器置1的作用,称为置1阻塞线。因此,该触发器常称为维持-阻塞触发器。

参考资料来源:百度百科- D触发器


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12294198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存