背景:初学数字IC时容易陷入书本与工程实际编程时的冲突,这里主要记录自己书本上学到的计数器与代码优化后的计数器。
//初学者看过夏宇闻老师的书的代码风格
module cnt(input clk,
input rst_n,
input [3:0]data,
input load_en,
output wire [3:0]cnt
);
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt=4'b0;
else if(load_en)
cnt=data;
else
cnt=cnt+1'b1;
end
endmodule
//工程实际
module cnt(input clk,
input rst_n,
input [3:0]data,
input load_en,
output wire [3:0]cnt
);
wire [3:0]cnt_pre;
assign cnt_pre=(rst_n==1'b0)?4'b0:
(load==1'b1)?data:
cnt+1'b1;
dff dff_test(.clk(clk),.rst_n(rst_n),.din(cnt_pre),.dout(cnt));
endmodule
module dff(input clk,
input rst_n,
input din,
output dout
);
always(posedge clk or negedge rst_n)
begin
if(!rst_n)
dout<= #1 1'b0;
else
dout<= #1 din;
end
endmodule