2017-06-30 57 views
0

的教科书,我读器具1位加法器使用内置基本模块:Verilog的:实现使用基本模块与位运算符

module yAdder1(z, cout, a, b, cin); 
    output[0:0] z, cout; 
    input[0:0] a, b, cin; 
    wire[0:0] tmp, outL, outR; 

    xor left_xor(tmp, a, b); 
    xor right_xor(z, cin, tmp); 
    and left_and(outL, a, b); 
    and right_and(outR, tmp, cin); 
    or my_or(cout, outR, outL); 
endmodule 

但是,为什么不使用位运算符?似乎更简单。

module yAdder1(z, cout, a, b, cin); 
    output[0:0] z, cout; 
    input[0:0] a, b, cin; 

    assign z = (a^b)^cin; 
    assign cout = (a & b) | ((a^b) & cin); 
endmodule 

除非按位运算符隐式使用原始模块?

回答

1

内建原语是在门级模型中表达门的一种便捷方式。通常它们是由其他工具生成的。除此之外,在普通的verilog中使用它们没有多少理由。

您可能会遇到的其中很少可能会碰到,主要是可用于驾驶巴士的各种三态缓冲区。但所有其他人都没那么用。

and no它们在模拟中并未隐式使用。

+0

啊我看到,门(结构)水平抽象与功能和算法水平(行为)抽象。每个人都有自己的优点和缺点。 – NoName

0

这只是写verilog的不同风格。前者是一种结构形式,后者更多是针对行为/功能的格式。

添加到@ Serge的观点,如果您尝试将它们中的每个分开合成,您会看到一个非常相似(可能完全相同)的网表。 以结构化方式编写代码将减轻综合工具将RTL映射到现有原语(在特征化库中)的工作量 - 缺点是难以理解查看结构化代码的功能。