gpt4 book ai didi

syntax-error - <<模块名称>>不是verilog中的任务或无效函数

转载 作者:行者123 更新时间:2023-12-03 08:00:29 25 4
gpt4 key购买 nike

我正在尝试在verilog中为进位选择加法器创建一个模块。一切正常,除了导致编译错误的以下部分。

module csa(a,b,s,cout);
input[15:0] a,b;
output [15:0] s;
output cout;
wire zero_c1, zero_c2,zero_c3,zero_c4,zero_c5;
wire one_c1, one_c2,one_c3,one_c4,one_c5;
wire temp_c1,temp_c2,temp_c3,temp_c4,temp_c5;
wire [15:0] s_zero, s_one;

initial
begin
fork
fa(s[0], temp_c1,a[0],b[0],0);
fa_one(s_zero[1],s_one[1],zero_c1,one_c1,a[1],b[1]);
fa_two(s_zero[3:2],s_one[3:2],zero_c2,one_c2,a[3:2],b[3:2]);
fa_three(s_zero[6:4],s_one[6:4],zero_c3,one_c3,a[6:4],b[6:4]);
fa_four(s_zero[10:7],s_one[10:7],zero_c4,one_c4,a[10:7],b[10:7]);
fa_five(s_zero[15:11],s_one[15:11],zero_c5,one_c5,a[15:11],b[15:11]);
join
end

当我尝试编译时,它说 -

the module "fa", "fa_one" are not a task or void function



我删除了“初始”声明,现在它说 -

Syntax error near "fork", expecting "endmodule"



我只想在 join 和 fork 之间并行运行代码。我还确认模块 fa, fa_one 工作正常。

如果有人可以帮助我指出我在这里做错了什么,将不胜感激。谢谢。

最佳答案

Verilog 模块不是运行或执行而是实例化,它们代表硬件的物理 block 。

除非您努力分时共享硬件,否则一切都是并行的。例如,您可能编写一个 ALU 内核,它只存在一次,但使用程序 ROM 告诉它每个时钟周期要处理哪条指令。

在您的模块中,您可以拥有组合代码和顺序代码。

组合 逻辑将在 0 时间内进行模拟,但实际上在放置在真实设备上时需要一些时间来传播值。

如果不考虑这种传播延迟并且创建了非常大的逻辑 block ,您将难以关闭综合时序,因为通过逻辑的建立时间大于组合逻辑任一侧的时钟速度。

顺序 逻辑意味着结果保存在触发器中,触发器仅在时钟沿更新。这意味着顺序逻辑链可能需要许多时钟周期才能传播数据。

在对处理器进行流水线处理时,您使用触发器将各个部分分解,为每个部分提供完整的时钟周期以进行组合传播,但代价是花费多个时钟周期来计算单个结果。

要更正您的示例,您只需:

module csa(
input [15:0] a,
input [15:0] b,
output [15:0] s,
output cout
);
wire zero_c1, zero_c2,zero_c3,zero_c4,zero_c5;
wire one_c1, one_c2,one_c3,one_c4,one_c5;
wire temp_c1,temp_c2,temp_c3,temp_c4,temp_c5;
wire [15:0] s_zero, s_one;

fa ufa(s[0], temp_c1,a[0],b[0],0);
fa_one ufa_one(s_zero[1],s_one[1],zero_c1,one_c1,a[1],b[1]);
fa_two ufa_two(s_zero[3:2],s_one[3:2],zero_c2,one_c2,a[3:2],b[3:2]);
fa_three ufa_three(s_zero[6:4],s_one[6:4],zero_c3,one_c3,a[6:4],b[6:4]);
fa_four ufa_four(s_zero[10:7],s_one[10:7],zero_c4,one_c4,a[10:7],b[10:7]);
fa_five ufa_five(s_zero[15:11],s_one[15:11],zero_c5,one_c5,a[15:11],b[15:11]);
endmodule

注意:它是 module_name #(parameters) instance_name ( ports );

关于syntax-error - <<模块名称>>不是verilog中的任务或无效函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com