我有一个可能是x(即未知)的 16 位数字。
我想将数字零扩展到 32 位,但如果 MSB 是x,那么我希望它被x扩展而不是零扩展。(这有助于我的模拟。)
我怎样才能做到这一点?
除非您使用带符号的值,否则我认为您将需要一个自定义函数。如果您使用有符号值,如果符号位为 X,MSB 将从 16 位值到 32 位值的赋值进行 X 扩展。但是,如果 MSB(符号位)为 1,则它将是 1-extended,如果您使用无符号值,这很可能不是您想要的。
这是一个简单的函数来做到这一点。
function [31:0] extend(input[15:0] in);
begin
if (in[15] === 1'bX) begin
extend = {16'hXXXX, in};
end else begin
extend = {16'h0000, in};
end
end
endfunction
Run Code Online (Sandbox Code Playgroud)
例子:
$display("%032b", extend(16'h0000));
$display("%032b", extend(16'hFFFF));
$display("%032b", extend(16'bX000_0000_0000_0000));
Run Code Online (Sandbox Code Playgroud)
输出:
00000000000000000000000000000000
00000000000000001111111111111111
xxxxxxxxxxxxxxxxx000000000000000
Run Code Online (Sandbox Code Playgroud)