如何实现一个n位加法器,其输入向量以八进制表示?

时间:2014-02-23 20:22:50

标签: verilog

我对这个问题感到有点困惑:

“编写一个verilog模块,用于完全添加n位整数。让参数,位数等于3.从测试平台调用此模块,并在测试平台中指定要添加的数字将八进制值分配给X和Y数组.adminin为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,并在测试平台上做同样的事情。

赞赏任何有建设性的意见。

2 个答案:

答案 0 :(得分:0)

我很确定我和你在同一个班级。我认为您需要做的是创建一个分层的Verilog模块,然后在那里分配您的值。那将是你的测试平台。例如,如果你想让X你写输入[n-1:0] X = 3'o013,或者如果Oli是正确的话,它可能是X = 9'o013。你不要改变n,但它有点像BCD,它们是成组的,你可以在溢出之前代表一定数量的位。

答案 1 :(得分:0)

帮助解决有关问题的问题:
Q)如何将数字存储在数字硬件中? A)二进制,在数字逻辑中我们只能表示2个值1和0,但是我们可以用它来表示整数,不动点或浮点数。

因此,数字数字是基数2(两个可能的值),同时能够表示任何数字。存在其他基数,例如Octal( base 8 )hex( base 16 )和decimal( base 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中的Octal,Decimal和Hex只是二进制格式的表示,是查看数据的一种方式。由于低电平电子设备无法表示0和1以外的任何其他东西。

关于Octal和Hex的有趣之处在于它们具有2个值的幂,因此它们使用精确的位数,因此9'O123与分别处理每个Octal位置并将它们连接在一起相同,{{{ 1}}。这也适用于十六进制值,但不是十进制(基数10)值,因为10不是2的幂,并且不完全占用数字空间。

这样可以创建“八进制”端口,只是3位二进制端口

9'O123 == {3'O1, 3'O2, 3'O3}