如何在verilog中拆分顺序和组合
我正在尝试用verilog制作一个计数器,我想知道如何将顺序部分与组合部分分开 我有这个模块,它工作正常,但我不知道如何分割它如何在verilog中拆分顺序和组合,verilog,counter,clock,Verilog,Counter,Clock,我正在尝试用verilog制作一个计数器,我想知道如何将顺序部分与组合部分分开 我有这个模块,它工作正常,但我不知道如何分割它 module counter4bits( input clk_i, input rst_n_i, input enable_i, input up_down_i, output reg[3:0] val_o); always@(posedge clk_i) begin if (rst_n_i == 1
module counter4bits(
input clk_i,
input rst_n_i,
input enable_i,
input up_down_i,
output reg[3:0] val_o);
always@(posedge clk_i) begin
if (rst_n_i == 1)
val_o <= 0;
else if(enable_i == 1)
val_o <= val_o + 1;
end
endmodule
模块计数器4位(
输入clk_i,
输入rst\u n\u i,
输入使能_i,
输入up\u down\u i,
输出寄存器[3:0]val_o);
始终@(posedge clk_i)开始
如果(rst_n_i==1)
val_o一种方法是使用分块分配(=
)为组合部件生成始终(*)块,并使用非分块分配为顺序部件生成始终(*)块(一种方法是生成始终(*)
为使用分块分配的组合部件设置块(=
),并为使用非分块分配的顺序部件设置块(为什么要拆分组合逻辑和顺序逻辑)。
您编写的代码是电源优化的好风格。
根据您的代码风格,工具可以理解触发器值将在enable_i上改变,因此工具足够智能,可以使用enable_i为触发器设置一个时钟门,从而降低功耗。为什么要拆分组合逻辑和顺序逻辑。
您编写的代码是电源优化的好风格。
根据您的代码风格,工具可以理解触发器值将在enable_i上改变,因此工具足够智能,可以使用enable_i为触发器设置时钟门,从而降低功耗
module counter4bits(
... input/output with no change
reg [3:0] val_nxt; // Not flip-flop but used in always @(*) thus reg
always @(*) begin
if (rst_n_i == 1)
val_nxt = 0;
else if(enable_i == 1)
val_nxt = val_o + 1;
end
always @(posedge clk_i)
val_o <= val_nxt;
endmodule