那位大哥帮忙给我写个分频器的程序,要C语言或者VERILOG语言的,谢谢!!

那位大哥帮忙给我写个分频器的程序,要C语言或者VERILOG语言的,谢谢!!,第1张

always@() begin

if(rst_n==0) begin

ena<=1;

end

else begin

if (ena_cnt==您需要的分频等级) begin

ena<=1;

end

end

这个程序里,full寄存器一直没有被复位。

always@(posedge clk)

begin

if(cnt8==8'hff)

begin

cnt8=data;

full<=1;

end

else

begin

cnt8=cnt8+1;

full<=1;//把这一句改成full<=0试试

end

end

module tb_clk;

// Inputs

reg clk_100m;

reg rst;

// Outputs

wire clk_1m;

// Instantiate the Unit Under Test (UUT)

sdio_slave uut (

clk_100m(clk_100m),

rst(rst),

clk_1m(clk_1m)

);

initial begin

// Initialize Inputs

clk_100m=0;

rst= 0;

// Wait 100 ns for global reset to finish

#100;

rst=1;

#100000;

$finish

end

always #5 clk_100m=!clk_100m;

endmodule

O了 但是就怕给了你代码,你连仿真软件都不会用

你好,使用以下程序即可,使用时只需改变N值,N的取值大小请看注释,此程序适合对任意时钟的整数分频(包括奇偶),此程序已通过验证。根据你的情况,想得到1HZ,N取50000000即可;想得到5HZ,N取10000000即可。

/

Author:Bob Liu

E-mail:shuangfeiyanworld@163com

Device:EP2C8Q208C8

Tool:Quartus 81

Function: 实现时钟的任意整数分频

Version:2012-1-9 v10

/

modulediv_N(

inputCLK,// 基准时钟

outputCLK_div_N// N分频后得到的时钟

);

wire[31:0]N=20;// N为分频系数,N≥2即可,N的值为CLK除以CLK_div_N后取整(四舍五入)

/ 产生备用时钟1 /

reg[31:0]cnt1;

regCLK_div_N_1;

always @ (posedge CLK)

begin

if(N%2==0)// 如果N为偶数

begin

if(N==2)// 如果N为2

CLK_div_N_1 <= ~CLK_div_N_1;

else

begin

if(cnt1==(N-2)/2)

begin

cnt1 <= 0;

CLK_div_N_1 <= ~CLK_div_N_1;

end

else

cnt1 <= cnt1+1;

end

end

else// 如果N为奇数

begin

if(cnt1==N-1)

cnt1 <= 0;

else

cnt1 <= cnt1+1;

if((cnt1==N-1) || (cnt1==(N-1)/2))

CLK_div_N_1 <= ~CLK_div_N_1;

else ;

end

end

/ 产生备用时钟2 /

wireCLK0=(N%2) (~CLK):0;// 如果N为偶数,备用时钟2(CLK_div_N_2)恒为0,即不需要用到此备用时钟

reg[31:0]cnt2;

regCLK_div_N_2;

always @ (posedge CLK0)

begin

if(cnt2==N-1)

cnt2 <= 0;

else

cnt2 <= cnt2+1;

if((cnt2==N-1) || (cnt2==(N-1)/2))

CLK_div_N_2 <= ~CLK_div_N_2;

end

/ 产生最终分频时钟/

assignCLK_div_N = CLK_div_N_1 | CLK_div_N_2;

endmodule

-- Bob Liu原创

这是个分频的模块

module clk434(clkin,clkout);

input clkin;

output clkout;

reg [8:0]num;

reg clkout;

always @(posedge clkin)

begin

if(num==324)num=0; ----只需要修改这里的324和下面的162就行了

else num=num+1; ----- 比如50M分1MHz,clkin=50M,50000000/1000000=50,就把324改为50,162改为50/2=25

if(num>162)clkout=1;

else clkout=0;

end

endmodule

以上就是关于那位大哥帮忙给我写个分频器的程序,要C语言或者VERILOG语言的,谢谢!!全部的内容,包括:那位大哥帮忙给我写个分频器的程序,要C语言或者VERILOG语言的,谢谢!!、FPGA书上的分频器程序,一模一样却仿真不出来,结果一直为0。、用verilog写了一段分频器的程序,想仿真出图是不是需要些testbench,如果需要下面的验证程序怎么写啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9869181.html

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

发表评论

登录后才能评论

评论列表(0条)

保存