用verilog hdl如何实现1n分频 就是提高频率

用verilog hdl如何实现1n分频 就是提高频率,第1张

所有的倍频都必须基于硬件电路本身, 如对PN结上产生高次谐波进行剥离。脱离PLL的Verilog不能倍频

1细读特定芯片的数据手册[datasheet], 查看时钟相关资源

2运行EDA软件,选设好特定芯片; 调用软件自带的IP/MegaCore,生成PLL模块

结合datasheet,实际需要及PLL设置界面,适当设定输入/输出/倍率,达到分频、倍频目的

3在需要倍频的Verilog程序中, 采用Module例化方式, 调用上述生成的PLL模块

4 FPGA程序中,能用一个时钟源就用一个时钟源派生的时钟。能用PLL时钟绝不用计数器分频。

module clk_div(clk,out1,out2);

input clk;

output out1,out2;

reg out1,out2;

reg [31:0]cnt1,cnt2;

always @(posedge clk)begin//50MHz分频计数

if(cnt1<32'd24999999)

cnt1 <=cnt1 + 32'd1;

else

cnt1 <=32'd0;

end

always @(posedge clk)//分频后的半周期反转

if(cnt1 == 0)

out1<=~out1;

always @(posedge clk)begin//5MHz分频计数

if(cnt2<32'd4999999)

cnt2 <=cnt2 + 32'd1;

else

cnt2 <=32'd0;

end

always @(posedge clk)//20%占空比

if(cnt2 == 32'd999999)

out2<=0;

else if(cnt2 == 32'd4999999)

out2<=1;

endmodule

你的程序的主要的问题就是

1你写的是时序逻辑,里面用到的reg类型的变量在正常使用之前是要初始化的,否则用modulesim仿真时会一直为红线"X"状态的。

2写常量数字时,一定要加上宽度,如果你只写一个“1”,那么这个1就默认为是32位的,很耗资源。

3除非你对`timescale在仿真时的冲突决策很了解,否则建议你只在Testbench中使用这个宏。

以下是我修改过的程序,我仿真过了,没问题:

module fenpinqi(

div12,

clk,

rst

);

input clk;

input rst;

output div12;

reg div12;

reg [2:0] cnt;

always @(posedge clk)

begin

if (rst == 1'b0)

begin

div12 <=1'b0;

cnt <='b0;

end

else

begin

if(cnt==3'b101)

begin

div12 <= ~div12;

cnt <= 'b0;

end

else

begin

cnt <= cnt + 1'b1;

end

end

end

endmodule

//

`timescale 1ns/1ns

module

fenpinqi_tb;

reg clk;

wire div12;

reg rst;

fenpinqi u3cs(

clk(clk),

div12(div12),

rst(rst));

initial

begin

clk=1'b0;

rst=1'b0;

#30 rst=1'b1; end

always

begin

#10 clk=1'b1; #10 clk=1'b0;

end

endmodule

以上就是关于用verilog hdl如何实现1/n分频 就是提高频率全部的内容,包括:用verilog hdl如何实现1/n分频 就是提高频率、用Verilog HDL编写简单的程序!数电实验!、Verilog分频器代码仿真错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存