永发信息网

求用Verilog实现50MHz分频为8Hz的程序

答案:3  悬赏:60  手机版
解决时间 2021-11-13 05:42
  • 提问者网友:星軌
  • 2021-11-12 23:40
求用Verilog实现50MHz分频为8Hz的程序
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-11-12 23:58
50M分频道8hz的话 50 000 000/8=6250000
reg clk_div8;
reg [23:0]cnt;
always @(posedge clk)
begin
if(!rst_n)

begin

clk_div8<=0;
cnt<=0;

end
else if(cnt==24'd3125000)
begin

cnt<=0;
clk_div8<=~clk_div8;
end
end

分析:50M周围为20ns,在3125000*20ns=0.0625s后clk_div8翻转,即clk_div8周期为2*0.0625s=0.125s,然后就是8hz了,可以追问,望采纳
全部回答
  • 1楼网友:持酒劝斜阳
  • 2021-11-13 02:17
module gen_divd(reset,clkin,clkout);
input reset,clkin;
output clkout;
parameter divdWIDTH=1; //参数定义
parameter divdFACTOR=1;
reg clkout;
reg [divdWIDTH:0] cnt; //2位计数器,最大记到3

always @ (posedge reset or posedge clkin)
if(reset) // 高电平复位
begin
cnt<=0; //计数器清零
clkout<=0; //输出时钟清零
end
else
begin
cnt<=cnt+1'b1; //计数开始,来一个上升沿记一次数
if(cnt==(divdFACTOR-1)) //当cnt等于1
begin
cnt<=0; //计数器清零
clkout<=~clkout; //输出时钟翻转一次,就是简单的2分频
//假设开始clkout时低电平,当cnt计数到1(clkin刚好一个周期)时,clkout就翻转,变成高电平,clkout一个周期,相当于clkin的2个周期,实现2分频
end
end
endmodule
  • 2楼网友:人類模型
  • 2021-11-13 01:14
module (reset_n ,clk_50M,clk_8)
input wire reset_n ;
input wire clk_50M
output reg clk_8 ;

reg [21:0] div_cnt ; //分频计数器,用于分频计数加法操作
reg [21:0] div_cnt_t; //分频计数器,保持div_cnt值。用于分频计数判断,把计数器加法和分频值比较用触发器切开,这样时序上可跑更高的频率。

always@(posedge clk_50M or negedge reset_n)
begin
if(!reset_n)
div_cnt <= 'h0 ;
div_cnt_t <= 'h0 ;
else
div_cnt <=div_cnt +1 ;
div_cnt_t <= div_cnt ;
end

always@(posedge clk_50M or negedge reset_n)
begin
if(!reset_n)
clk_8 <= 'h0 ;

else if( div_cnt_t == 'h2faf07) //'h2faf07 为8Hz分频值。
clk_8 <= ~clk_8 ;
else
clk_8 <= clk_8 ;
end

endmodule
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯