提问人:Deekshith Ranga Babu Tirumala 提问时间:11/15/2023 最后编辑:toolicDeekshith Ranga Babu Tirumala 更新时间:11/16/2023 访问量:106
无法使用 verilog 生成多个脉冲输出?
Unable to generate multiple pulse outputs using verilog?
问:
我正在尝试制作一个电路来产生不同脉冲的输出。输出脉冲在给定时间段内的给定值时间应具有高电平。信号需要在给定的重复输入次数内重复。我正在使用 intermedaite 变量计数器,并基于它更新输出。但是零脉冲被添加到每个周期的末尾。我是初学者。谁能说出我的方法中的错误或给我一个更好的方法代码。
module tb();
wire pulse;
reg clk,rst;
reg [2:0] value;
reg [2:0] period;
reg [2:0] repeator;
pulse_gen pg(clk,rst,value,period,repeator, pulse);
initial begin
$dumpfile("out.vcd");
$dumpvars(1);
clk=1;
rst=1;
#10;
rst=0;value=3'b011;period=3'b011;repeator=3'b010;
#180;
$finish;
end
always
begin
#10;
clk=~clk;
end
endmodule
设计.v
module pulse_gen(clk, rst, value, period, repeator, pulse);
input clk, rst;
input [2:0] value;
input [2:0] period;
input [2:0] repeator;
output reg pulse;
reg pulse_out;
reg [2:0] value_temp;
reg [2:0] period_temp;
reg [2:0] repeator_temp;
reg [2:0] counter;
always @(value or period or repeator)
begin
value_temp<=value;
period_temp<=period;
repeator_temp<=repeator;
end
always @(posedge clk or rst)
begin
if(rst)
begin
counter<=3'b000;
pulse_out<=0;
end
else
begin
if(repeator_temp>0)
begin
if(counter>period_temp)
begin
counter<=3'b000;
repeator_temp<=repeator_temp-1;
end
if(value_temp>period_temp)
begin
pulse_out <= 0;
end
else
begin
if(counter<value_temp)
begin
pulse_out <= 1;
end
else
begin
repeator_temp <= 3'b111;
pulse_out <= 0;
end
counter<=counter+3'b011;
end
end
else
begin
pulse_out <= 0;
end
end
end
always @(pulse_out)begin
pulse = pulse_out;
end
endmodule
输出图:以上试验台的输出
预期输出在 6 个时钟周期内持续保持高电平。
答: 暂无答案
评论
counter