2017-06-30 75 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映射到現有原語(在特徵化庫中)的工作量 - 缺點是難以理解查看結構化代碼的功能。