sgdd.net
当前位置:首页 >> vErilog分频模块 >>

vErilog分频模块

第一个程序:clk1输出占空比为50%,当count=000~011(0到3)的时候,clk1=count[2]=0;当count=100~111(4~7)的时候,clk1=count[2]=1;count从0~7循环,即完成8分频第二个程序:clk2输出占空比为50%,当count=00000~01111(0~15)的时候,clk1=count[2]=0;当count=10000~11111(16~31)的时候,clk1=count[2]=1;count从0~31循环即完成32分频

假设你的clk就是1s周期的时钟 那么10s的应该是这么写 reg [3:0] cnt_10; reg clk_10s; always @ (posedge rst or posedge clk) begin if (rst) begin cnt_10 clk_10s end else begin if (cnt_10==4) begin cnt_10 clk_10s end else begin cnt_10 clk_10s end end60的,cnt就在29归零,同时clk_60s反向 是在半周期反向才是占空比1:1.

这个要设置rom的,设置好rom然后直接调用,可以在rom里面设置好你自己需要的各个分频,然后在程序里面调用,还可以实现调频和歌曲的频率调整,详细的话你可以参考别人的歌曲是如果编程的,大概也是差不多

100MHZ就是1亿,分频到500,就是1亿/500=20万,只需要时序计数,逢20万一个周期即可,即10万一次信号翻转

50000000/160000/2=156.25hz 因为你这边是取反,高低电平要两个160000才是一个周期,所以要除以2 else if(cnt1 == freq_1) clk_out_r1 <= ~clk_out_r1;

1.将分频程序作为一个独立的module clkdiv(clk_in,clk_out),在另一个module(即顶层)中例化该模块,同时将clk_out作为其他模块的输入时钟;例化示例:module top_level() input clk; output .wire clkout;..clkdiv例化模块名字 clkdiv_int实例名字(.clk_in(clk),.clk_out(clkout))端口连接;//例化语句.endmodule2.直接将分频程序写在顶层中,并将分频后的输出作为其他模块的始终

1'b0就是一根接入逻辑零(GND)的线.1'b1就是一根接入逻辑一(VCC)的线.

module freq(out,clk,reset);input clk,reset;output out;reg out;reg[2:0] count;always @(posedge clk or negedge reset)if(!reset) begin out&lt;=1'b0; cont&lt;3'd0; endelse if(count==3'd8) begin count&lt;=3'd0; out&lt;=1'b1; endelse count&lt;=count+1'b1;endmodule

对于分频模块,一般设计中是采用PLL(锁相环,phase locked loop). 如果非要用verilog描述这个硬件电路的话,可以先计算矩形波高低电平所需时钟周期, 低电平所需即为cnt1,高为cnt2,将时钟按所需系数分频为新的时钟clk2, 用clk2根据cnt1、cnt2分频就得到所需结果了.

偶数分频可以向你这样实现,如果是奇数分频,你这样无法实现,给你换种实现方法:module fenpin_module( CLR, CLK, SW, CLKOUT); input CLK; //输入时钟 input CLR; input [2:0]SW; output CLKOUT; //输出时钟 //参数--分频系数

网站首页 | 网站地图
All rights reserved Powered by www.sgdd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com