状态机的verilog代码
我得到了一个组合电路,我将为该电路设计一个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
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