2014-02-23 26 views
0

我有點難住這個問題:如何實現輸入向量以八進制表示的n位加法器?

「寫一個verilog模塊來完全添加n位整數,讓參數,位數等於3.從測試臺調用這個模塊,然後在測試平臺中指定要添加到數組中的數字,將八進制值分配給X和Y數組,進位爲0。

是的,這是作業。

我能寫的N位加法器模塊:

module addern(carryin, X, Y, S, carryout, overflow); 
    parameter n = 3; 
    input carryin; 
    input [n-1:0] X, Y; 
    output reg [n-1:0] S; 
    output reg carryout, overflow; 

    always @(X,Y, carryin) 
    begin 
     {carryout, S} = X + Y + carryin; 
     overflow = (X[n-1] & Y[n-1] & ~S[n-1]) | (~X[n-1] & ~Y[n-1] & S[n-1]); 
    end 

endmodule 

我理解這個問題的分量。但是,我不確定如何實現八進制數的加法。在Verilog中有沒有一種方法可以表示數組是保持八進制值,而不是二進制?

在verilog中有類似於類型轉換的東西嗎?例如,input (octal) [n-1:0] X, Y,並在測試臺上做類似的事情。

讚賞任何建設性意見。

+0

你並不需要;只需以三人一組的方式佔用你的總體數字。 –

+0

好點。那麼我只需要通過參數'n'改變爲9?我唯一擔心的是問題的措辭。例如,它顯示將X明確地設置爲[0,1,3]。 – Mlagma

+0

他們要求你做的只是分配一個八進制文字到X - 'x = 9'o013' – Eric

回答

0

我很確定我和你在同一班。我認爲你需要做的是創建一個分層的Verilog模塊,然後在那裏分配你的值。那將是你的測試平臺。例如,如果你想讓X寫入輸入[n-1:0] X = 3'o013,或者如果Oli是正確的,那麼它可能是X = 9'o013。你不會改變n,但它有點像BCD,它們在一組中,並且在溢出之前你可以表示一定數量的位。

0

爲了幫助解決這個問題:
Q)數字硬件中如何存儲數字?
A)二進制,在數字邏輯中,我們只能表示2個值1和0,但有了這個,我們可以表示整數,定點或浮點數。

因此數字數字是基數2(兩個可能的值),同時能夠表示任何數字。其他鹼基如八元鹼(鹼基8)十六進制(鹼基16)和十進制(鹼基10)存在,但這些只是表示數字的方式,類似於二進制只表示數字的方式。

小數點1表示1 n個所有的鹼基,當存儲爲二進制時,它們全部相同。 verilog中的一些值的示例,以及二進制等值。

Octal Decimal Hex  Binary 
3'O7 => 3'd7 => 3'h7 => 3'b111 
6'O10 => 6'd8 => 6'h8 => 6'b001000 

八進制,十進制和十六進制的Verilog只是二進制格式,查看數據的方式表示。由於低級別的電子設備無法表示除0和1以外的任何其他東西。

Octal和Hex的有趣之處在於它們具有2個值的冪,因此它們使用精確的位數,因此9'O123是與分別對待每個八進制位置並將它們連接在一起,9'O123 == {3'O1, 3'O2, 3'O3}一樣。這對於十六進制值也是如此,但不是十進制(基10)值,因爲10不是2的冪,並且不完全佔據數字空間。

這並允許創建「八」端口,其中僅3位二進制港口

module octal_concat (
    input [2:0] octal_2, 
    input [2:0] octal_1, 
    input [2:0] octal_0, 
    output [8:0] concat 
); 
    assign concat = {octal_2, octal_1, octal_0}; 
endmodule 

octal_concat octal_concat_0 (
    .octal_2(3'O1), 
    .octal_1(3'O2), 
    .octal_0(3'O3), 
    .concat() //Drives 9'O123 which is also 9'b001_010_011 
);