module wjy_2093( input clk, output reg CP, output reg [2:0] Q ) ; parameter NO = 5000000; //0.1毫秒的脉冲走过多少个时钟信号:0.1ms/(1/50MHz) = 5000000个 reg [14: 0] cnt; //计数 reg [14: 0] cnt1; reg [14: 0] cnt2; reg [14: 0] cnt3; always @ (posedge clk) begin if(cnt < NO) begin cnt <= cnt + 15'd1; CP <= 1'b1; end else if(cnt< 2*NO) begin cnt <= cnt + 15'd1; CP <= 1'b0 ; end else cnt <= 15'd0; end always @ (posedge clk) begin if(cnt1 < 4*NO) begin Q[2] <= 1'b1; cnt1 <= cnt1 + 1'd1; end else if(cnt1 < 10*NO) begin Q[2] <= 1'b0; cnt1 <= cnt1 + 1'd1; end else cnt1 <= 15'd0; end always @ (posedge clk) begin if(cnt2 < 2*NO) begin Q[1] <= 1'b0; cnt2 <= cnt2 + 1'd1; end else if(cnt2 < 8*NO) begin Q[1] <= 1'b1; cnt2 <= cnt2 + 1'd1; end else if(cnt2 < 10*NO) begin Q[1] <= 1'b0; cnt2 <= cnt2 + 1'd1; end else cnt2 <= 15'd0; end always @ (posedge clk) begin if(cnt3 < 2*NO) begin Q[0] <= 1'b0; cnt3 <= cnt3 + 1'd1; end else if(cnt3 < 5*NO) begin Q[0] <= 1'b1; cnt3 <= cnt3 + 1'd1; end else if(cnt3 < 10*NO) begin Q[0] <= 1'b0; cnt3 <= cnt3 + 1'd1; end else cnt3 <= 15'd0; end endmodule
时间: 2024-04-25 22:26:25 浏览: 90
vc_code C/C++配置文件
这是一个 Verilog 的模块,实现了一个带有三个输出的计数器,同时使用时钟信号进行计数。其中,CP 输出是一个时钟脉冲信号,每 0.1 毫秒输出一次,而 Q 输出则是一个三位二进制数,根据计数器的值不同而变化。具体来说,Q[2] 在 0.4 毫秒时输出 1,其余时间输出 0;Q[1] 在 0.2 毫秒到 0.8 毫秒时输出 1,其余时间输出 0;Q[0] 在 0.2 毫秒到 0.5 毫秒时输出 1,其余时间输出 0。这个模块可以用于脉冲控制电路等应用中。
阅读全文