//任意奇数分频器,只需要将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 ieeeuse 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触发器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)