马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在编写代码时,开始写在一个模块里,实现了目标功能。后来,想把每个模块的功能细化一下,就把之前的整体代码分解成了几个子模块,再用上层模块调用,可是分解为子模块后,信号延迟了一个时间周期。
为什么会产生延迟,怎样才能分模块并取消延迟?
还有,怎样的代码风格是好的呢?我这种写法有什么问题呢?
PS:原代码要复杂一些,需要阻塞赋值。
我把我的代码简化成了下面的样子,仿真效果如图
整体模块的实现:
==============================================
`timescale 1ns/10ps
module all_in_one(clk,rst,a,b,k);
input clk;
input rst;
input a;
output k;
output b;
reg k;
reg b;
always@(posedge clk or negedge rst)
begin
if(!rst)
begin
k=1'b0;
b=1'b0;
end
else
if(a==0)
k=1'b0;
else
k=1'b1;
if(k==0)
b=1'b0;
else
b=1'b1;
end
endmodule
分解为子模块的的代码
===========================================
`timescale 1ns/10ps
module module_1(clk,rst,a,k);
input clk;
input rst;
input a;
output k;
reg k;
always@(posedge clk or negedge rst)
if(!rst)
k=1'b0;
else
if(a==0)
k=1'b0;
else
k=1'b1;
endmodule
————————————————————————————————————
`timescale 1ns/10ps
module module_2(clk,rst,a,k,b);
input clk;
input rst;
input a;
input k;
output b;
reg b;
always@(posedge clk or negedge rst)
if(!rst)
b=1'b0;
else
if(k==1)
b=1'b1;
else
b=1'b0;
endmodule
------------------------------------------------------------------
`timescale 1ns/10ps
module module_top(clk,rst,a,k,b);
input clk;
input rst;
input a;
output b;
output k;
module_1 module_1_try(.clk(clk),.rst(rst),.a(a),.k(k));
module_2 module_2_try(.clk(clk),.rst(rst),.a(a),.k(k),.b(b));
endmodule
|