用Verilog写一个位宽转换
时间: 2023-07-15 11:15:42 浏览: 81
FPGA同步时钟域数据位宽转换
以下是一个8位转4位的简单例子:
```verilog
module width_converter(
input [7:0] in_data,
output reg [3:0] out_data
);
always @(*) begin
case(in_data)
8'b0000_0000: out_data = 4'b0000;
8'b0000_0001: out_data = 4'b0001;
8'b0000_0010: out_data = 4'b0010;
8'b0000_0011: out_data = 4'b0011;
8'b0000_0100: out_data = 4'b0100;
8'b0000_0101: out_data = 4'b0101;
8'b0000_0110: out_data = 4'b0110;
8'b0000_0111: out_data = 4'b0111;
8'b0000_1000: out_data = 4'b1000;
8'b0000_1001: out_data = 4'b1001;
8'b0000_1010: out_data = 4'b1010;
8'b0000_1011: out_data = 4'b1011;
8'b0000_1100: out_data = 4'b1100;
8'b0000_1101: out_data = 4'b1101;
8'b0000_1110: out_data = 4'b1110;
8'b0000_1111: out_data = 4'b1111;
default: out_data = 4'b0000; // 这里默认转换为0
endcase
end
endmodule
```
这个例子使用了一个 `case` 语句将 8 位数据转换为 4 位数据。在 `case` 语句中,我们将 `in_data` 的所有可能值都列出来,并将它们转换为相应的 4 位数据。如果输入的值不在这些范围内,则将输出设置为默认值。
阅读全文