状态机的verilog代码

状态机的verilog代码,verilog,Verilog,我得到了一个组合电路,我将为该电路设计一个verilog代码。这是关于国家机器的。方程式如下: A(t+1)=A(t)+B(t); B(t+1)=A(t)'+B(t); 没有其他输出或输入。我尝试了一些代码,但都不起作用。我对分配A,B,A_next,B_next作为输入,输出和线路感到困惑。谁能给我一点提示,让我再试一次 module statemac_posed(clk,a,b); input clk; output a,b; reg a_next,b_next; always@(pos

我得到了一个组合电路,我将为该电路设计一个verilog代码。这是关于国家机器的。方程式如下:

A(t+1)=A(t)+B(t);
B(t+1)=A(t)'+B(t);
没有其他输出或输入。我尝试了一些代码,但都不起作用。我对分配A,B,A_next,B_next作为输入,输出和线路感到困惑。谁能给我一点提示,让我再试一次

module statemac_posed(clk,a,b);
input clk;
output a,b;
reg a_next,b_next;

always@(posedge clk)
begin
a=a_next;
b=b_next;
a_next=a|b;
b_next=~a|b;

end

endmodule

触发器的输出是您的下一个值,作为同步逻辑,您可以只写:

对于FPGA,可以使用
initial
设置ASIC的初始值,并使用低电平复位

module statemac_posed(
  input      clk,
  output reg a,
  output reg b
);

initial begin
  a = 'b0;
  b = 'b0;
end

//On clock edge update a &b with new values based on previous a & b value
always@(posedge clk) begin
  a <= a|b;  
  b <= ~a|b;
end

endmodule
模块状态(
输入时钟,
输出寄存器a,
输出寄存器b
);
初始开始
a='b0;
b='b0;
结束
//在时钟边缘使用基于先前a&b值的新值更新a&b
始终@(posedge clk)开始

a电路有3个输入(Ain、Bin、时钟)、2个状态(Ast、Bst)和2个输出(Aout、Bout),对吗?
A(t)
是什么意思(
)?我把它的意思改为“not”~A(t)。我应该补充的是,A_next是第一个DFF的输入,B_next是第二个DFF的输入。然后可能只需在模块中声明两个寄存器
Ast
Bst
,使
alwais
块对时钟敏感,将表达式分配给这些寄存器,并将这些寄存器分配给输出。如果这不起作用-请提供您的非工作代码。我是否应该将表达式分配给寄存器,并将寄存器分配给同一开始-结束块中的输出?
module statemac_posed(
  input      clk,
  output reg a,
  output reg b
);
  reg a_next;
  reg b_next;

//Combinatorial take outputs from flip-flops and combinatorial define next value
always @* begin
  a_next = a|b; 
  b_next = ~a|b;
end   

initial begin
  a = 'b0;
  b = 'b0;
end

//on Clock edge take the next values
always @(posedge clk) begin
  a <= a_next;
  b <= b_next;
end

endmodule