簡體   English   中英

邏輯門級的位集

[英]Bitset at the logic-gate level

我正在考慮在邏輯門級別實現一個 4 位 BitSet 函數,以便它可以用結構化 Verilog 編寫——我在別處尋找這個問題的答案,但只能找到 C/C++ 資源,這些資源運行在更高的層次上,對我來說大多是無用的。

我的接口的輸入是一個 4 位數字x ,一個兩位數字index ,包含要在x 中設置或清除的索引,一個一位數字value ,包含值x[index]應設置為 ( 1 或 0 分別設置或清除),以及 4 位輸出y ,這是x的最終結果。

據我了解,在 x 中設置一個值遵循邏輯 y |= 1 < < x 並清除 x 中的值遵循 y &= 1 < < x,這樣如果等於 1,則通過 OR 門發送它已經在x 的索引中的值將導致 1,如果等於 0,將它發送到一個與值已經在x 的索引中的 AND 門將導致 0。這對我來說很有意義。

如果我從一個 4 位數字x 開始,我可能會將它通過一個 1 到 4 個 DEMUX 塊(除了基本邏輯門,我有 MUX、DEMUX、幅度比較器和二進制我可以使用加法器)來獲取各個位。

我不確定的是如何僅使用基本邏輯門根據索引中存儲的值從四個單獨的位中選擇其中一個進行修改。 有什么想法或建議讓我開始嗎? 我是否以正確的方式思考這個問題?

我想你正在尋找這樣的東西

reg [3:0] x;
reg [3:0] y;
reg [1:0] index;

// wont work in synthesis
x[index] = 0;

在 Verilog 中,您可以使用 [Bit_Number] 單獨訪問每個位,但在您的情況下,索引不是恆定的,最終會在綜合過程中失敗。 您可以做的是編寫一個 if else 來檢查索引並更改正確的索引,以便

if (index == 1) // change bit one
    x[1] = 1'b0; // value to assign is zero here
else if(index == 2)
    x[2] 1'b0;

旁注:

你也可以賦值

// Here x gets the bit 1 and bit 0 of y concatenated with the value of index 
x = {y[1:0],index};

所以假設

y = 4'b1011;
index = 2'b00;
x =  {y[1:0],index} = 1100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM