我有32位数。我只需要它的前8位。我想我可以通过两种方法来做到这一点:一种方法是将数字右移24位,另一种方法是简单地将最后8位分配给变量。 这是我想要做的:
module Data_shiftin(
input reset_n, clk,
input [31:0] data_in,
output [31:0] data_out
);
reg [31:0] data_reg;
reg data_out;
always @ (posedge clk)
begin
data_out<=data_in[31:23];
end
endmodule
但我只得到最后一位,即数字的第32位。我不知道我在做错误的地方。 谢谢!
P.S:我是这种语言的新手。答案 0 :(得分:2)
您拥有的任务是正确的,但您只获得一位,因为您将data_out
重新声明为单位注册。尝试更改:
reg data_out
要:
reg[31:0] data_out
更好的选择虽然使用Verilog-2000样式端口声明并将reg
关键字放在端口列表中。
示例:
module Data_shiftin(
input wire reset_n,
input wire clk,
input wire [31:0] data_in,
output reg [31:0] data_out
);
always @ (posedge clk)
begin
data_out <= data_in[31:23];
end
endmodule
另请注意,您的工具可能会警告您宽度不匹配,因为您要将8位值分配给32位值。要明确指定data_out
的低8位,您应该使用:
data_out[7:0] <= data_in[31:23]