三角波verilog
我试图得到一个三角形的波形,但我的代码不起作用!我认为“如果条件”是有组织的错误,但我找不到错误,我的波浪像应该的那样上升,在达到顶部后下降90°三角波verilog,verilog,Verilog,我试图得到一个三角形的波形,但我的代码不起作用!我认为“如果条件”是有组织的错误,但我找不到错误,我的波浪像应该的那样上升,在达到顶部后下降90° module pila(clk,res,out2); input clk,res; output [0:7]out2; reg [0:7]out2; always @(posedge clk) begin if (res) begin if(out2<=8'b11111111) out2=out2+1; else
module pila(clk,res,out2);
input clk,res;
output [0:7]out2;
reg [0:7]out2;
always @(posedge clk)
begin
if (res)
begin
if(out2<=8'b11111111)
out2=out2+1;
else if(out2>=8'b00000000)
out2=out2-1;
else out2=8'b00000000;
end
else out2=8'b00000000;
end
endmodule
module testbench;
reg clk,res;
wire [0:7]out2;
pila Sevo(clk,res,out2);
always #2 clk=~clk;
initial
begin
clk=0;res=0;
#2 res=1;
end
initial #5000 $finish;
endmodule
模块pila(时钟、恢复、输出2);
输入时钟,res;
输出[0:7]输出2;
reg[0:7]out2;
始终@(posedge clk)
开始
如果(res)
开始
如果(out2Theif)(out2Theif(out2您需要一些信号来指示您当前正在计数的方向。还需要使用非阻塞分配运算符您需要一些信号来指示您当前正在计数的方向。还需要使用非阻塞分配运算符您看到的out2
跟随00->01->…->FE->FF->00->01->代码>模式但预期00->01->…->FE->FF->FE->01->00->01->…
,对吗?@Greg-是的,你看到的out2
是正确的,遵循00->01->…->FE->FF->00->01->模式但预期00->01->01->…
,对吗?@Greg-是的,你在EDA上纠正了你的例子更改out2
的顺序,并在模块中使用[7:0]
,但在测试台中使用[0:7]
。您在EDA上的示例颠倒了out2
的顺序,并在模块中使用[7:0]
,但在测试台中使用[0:7]
。我遇到语法错误atif(out2=8'B111111),应该是(out2==8'b11111111),但它起作用了!谢谢!如果(out2=8'b11111111)出现语法错误,应该是if(out2==8'b11111111),但它起作用了!谢谢
if (out2 == 8'h00) begin
downup <= 1'b0; // up
out2 <= 8'h01;
end
else if (out2 == 8'hFF) begin
downup <= 1'b1; // down
out2 <= 8'hFE;
end
else if (downup) begin // down
out2 <= out2 - 1;
end
else begin // up
out2 <= out2 + 1;
end
module pila(clk,res,out2);
input clk,res;
output [0:7]out2;
reg [0:7]out2 = 8'h00;
reg count_down = 1'b0;
always @(posedge clk)
begin
if (count_down == 1'b0)
begin
if (out2==8'b11111111) // check for top of count
begin
count_down <= 1'b1;
out2<=out2-1;
end
else
out2<=out2+1;
end
else
begin
if(out2==8'b00000000) // check for bottom of count
begin
count_down <= 1'b0;
out2<=out2+1;
end
else
out2<=out2-1;
end
end
endmodule