<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 時序電路中 ## 只有一級時 ### 非阻塞賦值 ``` module t( input clk, input din, output reg a ); always@(posedge clk) a <= din; endmodule ``` 綜合后的RTL: ![](https://img.kancloud.cn/0e/4f/0e4f94b5a8ae5bd6539381dee712337d_631x310.png) ### 阻塞賦值 ``` module t( input clk, input din, output reg a ); always@(posedge clk) a = din; endmodule ``` 綜合后的RTL: ![](https://img.kancloud.cn/ea/a3/eaa32f1e5a747524602a27ca1c46af33_723x384.png) ### 小結 ` `可以看到在這種情況下兩者綜合出來的是一樣的,都是一個觸發器,但是我們在使用的時候盡量還是保證時序電路用`<=`,組合電路用`=`,大多數情況用`<=`的原則。 ## 多級連接 ### 非阻塞賦值 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b <= a; c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/a2/d3/a2d3da5e887ce07416cda52e96c7c28d_927x550.png) ### 阻塞賦值 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a = din; b = a; c = b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/42/a4/42a43fff61aa0e44359dbce8e0999daf_706x606.png) ### 混合使用 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b = a; c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/13/29/13298b15d470b31fb75b32286025956f_831x483.png) ` `可看到<=賦值影響的是后面的部分,前面的沒有受到影響。由此我們推測到下面這種和上面的綜合結果將會是一樣的。 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b = a; c = b; end endmodule ``` ![](https://img.kancloud.cn/7b/61/7b61791b2bf4c8eceeaefa7233511bc8_864x496.png) ` `結果證明上述猜測是對的。 ` `上面的都是放在同一個always中,那么我們將其放在兩個always中會怎樣? ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b = a; end always@(posedge clk) begin c = b; end endmodule ``` ![](https://img.kancloud.cn/18/d0/18d06357440033a1bf5e5b6b428d1206_860x508.png) ` `發現相當于就是三個模塊都按非阻塞復制連接的。 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b = a; end always@(posedge clk) begin c <= b; end endmodule ``` 綜合結果和上一種情況一樣: ![](https://img.kancloud.cn/70/7a/707abe3a51e3f3d1a6d03abd5f54e643_956x567.png) ### 看看其他組合的情況 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a <= din; b <= a; end always@(posedge clk) begin c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/1f/90/1f902fb57fdb947d0686b8b6c57a15c8_1051x594.png) ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(posedge clk) begin a = din; b = a; end always@(posedge clk) begin c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/43/a0/43a0995beb0dede971942d53ada6c15b_1049x591.png) ### 小結 ` `可以看到,阻塞賦值相當于幾個并聯起來,而非阻塞賦值相當于幾個串聯起來,因此串聯起來的模塊在時序電路中,后一級的數據要晚于前一級的數據一個始終的時間。 # 在組合電路中 ## 只有一級時 ### 阻塞賦值 ``` module t ( input clk, input din, output reg a ); always@(clk) begin a = din; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/05/31/05319e8f695b31fecc33655f7782e385_603x325.png) ### 非阻塞賦值 ``` module t ( input clk, input din, output reg a ); always@(clk) begin a <= din; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/55/33/55333c9f780a39fcc57b0de502f8bf76_724x361.png) ## 多級連接 ### 阻塞賦值 ``` module t ( input clk, input din, output reg a output reg b, output reg c ); always@(*) begin a = din; b = a; c = b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/6e/24/6e24b592fa17cf1c8e09167bbd072e85_585x363.png) ### 非阻塞賦值 ``` module t ( input clk, input din, output reg a output reg b, output reg c ); always@(*) begin a <= din; b <= a; c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/56/e7/56e7c15eae9e48407f97eecc067dd8f3_828x454.png) ### 其他情況 ``` module t ( input clk, input din, output reg a, output reg b, output reg c ); always@(*) begin a <= din; end always@(a) begin b <= a; end always@(b) begin c <= b; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/ec/0a/ec0a6de0bdbca510a79d290169eabbc0_841x467.png) ` `上面的結果你可能還沒理解,我們結合下一個你再看看,就明白了。就好像c中的函數一樣,上一個的結果做為下一個的輸入! ``` module t ( input clk, input [7:0]din, output reg[7:0]a, output reg[7:0] b, output reg[7:0]c ); always@(*) begin a <= din+1; end always@(a) begin b <= a + 2; end always@(b) begin c <= b + 5; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/ec/70/ec70a4ffa0c7b8e06ea461b6f2126bae_1036x349.png) ``` module t ( input clk, input [7:0]din, output reg[7:0]a, output reg[7:0] b, output reg[7:0]c ); always@(*) begin a = din+1; end always@(a) begin b = a + 2; end always@(b) begin c = b + 5; end endmodule ``` 綜合結果: ![](https://img.kancloud.cn/9d/01/9d01093dfb586dc0976c54986729a663_1048x331.png) ### 小結 ` `能發現在組合邏輯下,`=和<=`沒有區別。 # 總結 ` `綜上所述,我們需要注意的是在時序電路下,多級連接時選擇阻塞賦值愛是非阻塞賦值,其他的基本沒有什么問題,組合邏輯下不區分`=和<=`。 ` `阻塞賦值:阻塞賦值語句是在這句之后所有語句執行之前執行的,即后邊的語句必須在這句執行完畢才能執行,所以稱為阻塞,實際上就是順序執行。 ` `非阻塞賦值:非阻塞賦值就是與后邊相關語句同時執行,即就是并行執行。 ` `所以一般時序電路使用非阻塞賦值,assign語句一般使用=阻塞賦值; ` `組合邏輯電路使用阻塞賦值;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看