三角波verilog

三角波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

我试图得到一个三角形的波形,但我的代码不起作用!我认为“如果条件”是有组织的错误,但我找不到错误,我的波浪像应该的那样上升,在达到顶部后下降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 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)
开始

如果(out2The
if)(out2The
if(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