我对这个问题感到有点困惑:
“编写一个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
,并在测试平台上做同样的事情。
赞赏任何有建设性的意见。
答案 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}