本人前两天用Verilog在Quartus II下写了个计数器,用来输出多个脉冲的。clk为100MHz时钟,想实现当U2输入一个几十ns的脉冲信号后,OP输出在一定的时间间隔后输出几个几十ns的脉冲。仿真的结果是OP出了nnn个脉冲,并不是我想要的结果。希望不幸看到这帖子的各位的江湖救急,能指点一二,感谢:)<br /><br />module epm7000(OP, U2,clk);<br /><br /> input U2,clk; //U2为输入脉冲,clk为100MHz时钟<br /> output OP; //脉冲输出<br /> reg OP;<br /> reg start,stop;<br /> reg [15:0]out;<br /> <br /> always @(posedge U2 or negedge stop or posedge clk)//设置启停<br /> begin<br /> if(U2)<br /> begin<br /> start <= 0;<br /> end<br /> if(stop == 0)<br /> begin<br /> start <= 1;<br /> end<br /> end<br /> <br /> always @(posedge clk or negedge start)//计数出脉冲<br /> begin<br /> if(start == 0)<br /> begin<br /> out <= out + 1;<br /> <br /> case(out)<br /> 16'H0042: OP <= 1; //1脉冲<br /> 16'H004C: OP <= 0;<br /> <br /> 16'H014D: OP <= 1; //2脉冲<br /> 16'H0157: OP <= 0;<br /> <br /> 16'H029B: OP <= 1; //3<br /> 16'H02A5: OP <= 0;<br /> <br /> 16'H0536: OP <= 1; //4<br /> 16'H0540: OP <= 0;<br /> <br /> 16'H07D1: OP <= 1; //5<br /> 16'H07DB: OP <= 0;<br /> <br /> 16'H07F2: OP <= 1; //6<br /> 16'H07FC: OP <= 0;<br /> <br /> 16'H0D08: OP <= 1; //7<br /> 16'H0D12: OP <= 0;<br /> <br /> 16'H1A11: OP <= 1; //8<br /> 16'H1A1B: OP <= 0;<br /> <br /> 16'H2EE8: OP <= 1; //9<br /> 16'H2EF2: OP <= 0;<br /> <br /> 16'H4000: stop <= 0; //停止<br /> //default:;<br /> endcase<br /> end<br /> else<br /> begin //复位<br /> OP <= 0;<br /> out <= 0;<br /> stop <=1;<br /> end<br /> end<br /> <br />endmodule<br /> |
|