求助:一个简单的verilog程序,不过仿真和理论值不符
时间:10-02
整理:3721RD
点击:
FPGA 时钟频率50MHz
要实现的功能描述如下: 写一路脉冲,以clk_50M下降沿触发,从零计数到280为低电平,然后从281-285(5个时钟脉冲)为高电平,然后从286-330(45个时钟脉冲)为低电平,接着计数5个时钟脉冲为高电平,接着45个时钟脉冲为低电平,也就是说,这路脉冲在计数281次后,为一个占空比为1:10的(周期为1000ns)的脉冲:
所写程序如下:
要实现的功能描述如下: 写一路脉冲,以clk_50M下降沿触发,从零计数到280为低电平,然后从281-285(5个时钟脉冲)为高电平,然后从286-330(45个时钟脉冲)为低电平,接着计数5个时钟脉冲为高电平,接着45个时钟脉冲为低电平,也就是说,这路脉冲在计数281次后,为一个占空比为1:10的(周期为1000ns)的脉冲:
所写程序如下:
- module(clk_50M,rst_n,count1,SP)
- input clk_50M,rst_n;
- output reg [8:0] count1;
- output SP;
- reg SP;
- always @(negedge clk_50M or negedge rst_n)
- begin
- if(!rst_n)
- count1 9'd285)
- begin
- SP 9'd330)
- count1 9'd285)
begin
SP 9'd285)
begin
SP 9'd330)
count1 =0 && count2 =281 && count2 =286 && count2 =281 && count2 =0 && count2 9'd285)改为else if(ount1>9'd285 &&ount1<=9'd330)
if else else语句能不能执行多个分支,条件满足只执行一个
建议设置标志位,即计数到280,设置标志位=1,不过要加一个计数寄存器count2判断标志位成立来完成占空比,这样两个always就可以模块化