verilog编写可调PWM波形

verilog编写可调PWM波形,第1张

module pwm_test(

input clk , //时钟输入,可在外部设置不同时钟

input rst_n , //低电平复位

input [7:0] f , //频率控制,最大255

input [7:0] d , //占空比控制字,上限100

output pwm_out //PWM输出

)

reg [17:0] count //计数

always @(posedge clk or negedge rst_n) begin

if(~rst_n) begin

count <= 0

end

else if(count >= 17'd100_000) //计数到100K清零

count <= 0

else

count <= count + f //每次累加频率值

end

assign pwm_out = (count <d*1000)? 1:0 //PWM输出

endmodule

思路就是倍频累加,剩下的拨码开关程序自己想一下吧。

例如输入时钟100M,频率设为20的时候,计数100K,每次加20,输出频率就是100M/(100K/20)=20K,占空比你一看就明白

至于输入时钟,用Tools->Megawizard Plug-In Manager->I/O->ALTPLL模块设置PLL分频,倍频即可

学always循环体怎么用, 掌握时序电路的写法. 你上面的都是组合电路.

也可用dff或dffe直接例化d触发器, 格式大致是d1 dff (.clk(??), .d(??), .q(??), .clr(??), .set(??) ).

得引入时钟信号,触发d>q的传递.

初学verilog, 综合(编译)过程中所有的warning都要视为error一一消除. 除非你非常熟练知道每个warning确实不会影响结果.

初学verilog, 综合完,在菜单内找RTL viewer看看电路框图,是不是你设想的形式.语法精通后不必看.

RTL无误后进行仿真. 先功能,后时序,都没问题即可写入FPGA了.


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

原文地址: http://outofmemory.cn/yw/8091423.html

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

发表评论

登录后才能评论

评论列表(0条)

保存