Parbegin / Parend 併發語句


在像 VHDL 這樣的硬體描述語言中,"父"併發語句用於建立分層設計結構。它能夠在一個組織內部建立和管理多個程序。

父併發語句的示例如下所示:

entity my_entity is
   port (
      clk: in std_logic;
      reset: in std_logic;
      data_in: in std_logic_vector(7 downto 0);
      data_out: out std_logic_vector(7 downto 0)
   );
end entity;
 
architecture behavioral of my_entity is
begin
   -- Parent Concurrent Statement
   parent_process: process(clk, reset)
   begin
      if reset = '1' then
         -- Reset condition
         data_out <_edge(clk) then
         -- Child process 1
         child1_process: process(data_in)
         begin
         -- some logic using data_in
         data_out(0) <= data_in(0);
         data_out(1) <= not data_in(1);
         end process;
            
         -- Child process 2
         child2_process: process(data_in)
         begin
         -- some logic using data_in
         data_out(2) <= data_in(2);
         data_out(3) <= not data_in(3);
         end process;
      end if;
   end process;
end architecture;

上面程式碼中存在一個名為 parent_process 的父程序。clk 和 reset 訊號的變化啟動了這個程序。

如果 reset 訊號為高電平,則 data_out 訊號被設定為零。當 reset 訊號為低電平且 clk 出現上升沿時,會建立兩個子程序,child1_process 和 child2_process。

這兩個子程序中的每一個都在 data_in 訊號發生變化時啟動。它們使用 data_in 進行一些處理,並將值賦予 data_out 訊號的特定位。

程式碼的逐步執行

  • 為實體 my_entity 定義輸入和輸出埠。

  • 根據架構行為定義,建立父程序並將其命名為 parent_process。

  • 訊號 clk 和 reset 導致父程序執行。

  • 如果 reset 訊號為高電平,則 data_out 訊號被設定為零。

  • 當 reset 訊號為低電平且 clk 出現上升沿時,會建立兩個子程序,child1_process 和 child2_process。

  • 當 data_in 訊號發生變化時,子程序使用 Data_in 執行一些邏輯。

  • data_out 訊號的特定位。

  • 直到發生另一個觸發事件,父程序才會繼續執行程式碼。

如何構造 Parend 併發語句?

Parbegin 是一種併發程式設計概念,它允許多個活動或程序同時執行。它將程式碼分成可以併發且獨立執行的部分。Parbegin 的具體行為可能會根據所使用的平臺或程式語言而有所不同。如果不小心使用 parbegin,可能會導致競爭條件和其他併發問題。

關鍵字 "generate" 後跟一個標籤,並用關鍵字 "begin" 和 "end" 括起來,表示父併發語句。"If" 語句、"for" 迴圈和 "case" 語句是可以引入的其他併發語句。父併發語句的示例如下:

語法

gen_label: generate
   for i in 0 to 3 generate
      process_clk: process (clk)
      begin
         if rising_edge(clk) then
         -- do something
         end if;
      end process process_clk;
   end generate gen_label;

Parend 併發語句的優缺點

父併發語句提供了許多好處,但也有一些潛在的缺點,設計人員需要了解。使用父併發語句可能存在以下缺點:

缺點

時序問題

處理併發操作之間的時序依賴關係可能具有挑戰性。例如,如果一個程序依賴於另一個程序的輸出,則它可能需要等待另一個程序完成才能開始。這些時序約束可能會被引入,並且必須小心管理,以確保正確操作。

增加資源消耗

多個程序同時執行可能會消耗更多的記憶體和處理器時間。如果程序過多,則設計總體上可能會使用更多的資源。

有限的並行性

雖然父併發語句允許並行執行程序,但可用硬體資源可能會限制並行性的程度。如果硬體資源不足以支援所有併發程序,則某些併發程序可能需要序列化,這會降低並行處理的潛在優勢。

除錯包含多個併發程序的設計的問題

程序之間複雜的互動可能會使除錯變得困難。如果問題涉及多個程序之間的互動,則可能難以查明根本原因。

總的來說,父併發語句有很多優點,但它們也可能增加一些額外的複雜性和挑戰,需要仔細處理。在決定是否在給定設計中使用父併發語句時,設計人員應仔細權衡這樣做的好處和壞處。

優點

父併發語句是一種用於數位電路設計的概念,它允許多個程序同時執行。父併發語句具有以下優點:

並行執行

父併發語句允許並行執行多個程序。能夠同時執行多個任務可以提高設計的整體效能。

模組化設計

父併發語句允許採用模組化設計方法,其中不同的設計元件可以作為獨立的程序執行。因此,它可以簡化複雜和大型設計的管理,因為每個步驟都可以單獨設計和測試。

更好的可讀性

透過使用父併發語句,設計人員可以使程式碼更易於理解和維護。這是可能的,因為每個程序都可以作為一個單獨的模組構建,具有清晰的介面以及明確定義的輸入和輸出。

更好的故障隔離

父併發語句可以幫助在設計中實現更好的故障隔離。一個程序中的故障不太可能影響同時執行的其他程序。

簡化除錯

在設計中使用父併發語句可以簡化除錯。可以獨立地測試和除錯每個程序,這可以加快識別和隔離問題。

總而言之,父併發語句是數字硬體設計人員的一項強大工具,它提供了許多優點,可以幫助提高設計的效能、可讀性和可維護性。

示例

VHDL 中的併發語句是指與設計中的其他語句同時執行的語句。帶括號的併發語句是指使用括號將多個其他併發語句組合在一起的併發語句。以下是 VHDL 中帶括號的併發語句的示例。

begin
S1;
      parbegin
      S3;
      begin
      S2;
         parbegin
         S4;
         S5;
         parend;
         S6;
      end;
      parend;
S7;
end;

輸出

在本例中,所有三個併發語句都將同時執行,因為它們包含在括號中。第一個語句中的程序在 clk 的上升沿時啟動。第二個語句在 my_condition 為真時為 my_signal 賦值 "1",否則賦值 "0"。第三個語句將 my_input + 1 賦值給 My_output。

重要的是要記住,括號本身對併發語句的行為沒有影響。它們僅僅是為了組織和可讀性而將語句組合在一起。

結論

帶括號的併發語句是在 VHDL 中使用的一種語句型別,它允許在一組括號內組合多個併發語句。這可以使設計更簡單、更容易理解和維護。與所有 VHDL 結構一樣,正確使用它並瞭解其限制和風險至關重要。併發語句允許在硬體設計中指定同時發生的程序,而無需使用順序程式碼結構(如迴圈或 if-else 語句),使其成為硬體描述語言的重要組成部分。這可以提高設計效能和效率,因為它允許多個活動同時發生。它允許構建並行塊,這些塊可以幫助模組化複雜的行為,並透過共享變數或訊號相互互動。

更新於: 2023年7月20日

470 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告