简化 Verilog 中数组变量的 "If" 语句
Simplifying "If" Statement of Arrayed Variables in Verilog
我正在使用 UART 输入各种字符 (ASCII) 并将每个字符转换为十六进制。我正在使用一个数组来存储这些字符输入。如果可能,我想简化这个可能过多的 "if" 语句。
我的声明:
reg [7:0] input_param [1:12]; // Array w/8-bit wide variables
localparam ASCII_0 = 8'h30;
// ASCII to Hex Conversion
always@(input_param)
begin
if (input_param[1] == ASCII_0) input_param_h[1] = 4'h0;
else if(input_param[1] == ASCII_1) input_param_h[1] = 4'h1;
...
else if(input_param[1] == ASCII_F) input_param_h[1] = 4'hF;
这将继续我允许的输入数量:
if (input_param[12] == ASCII_0) input_param_h[2] = 4'h0;
else if(input_param[12] == ASCII_1) input_param_h[2] = 4'h1;
...
else if(input_param[12] == ASCII_F) input_param_h[2] = 4'hF;
end
您可以在 for
循环中使用 case
语句:
integer i;
always @* begin
for (i=1; i<=12; i=i+1) begin
case (input_param[i])
ASCII_0: input_param_h[i] = 4'h0;
ASCII_1: input_param_h[i] = 4'h1;
//
ASCII_F: input_param_h[i] = 4'hF;
endcase
end
end
case
比 if/else
.
更简单
for
循环比12个case
语句简单;循环将展开成 12 个并行的 case
语句。
always @*
比使用带有信号的灵敏度列表更简单。
我正在使用 UART 输入各种字符 (ASCII) 并将每个字符转换为十六进制。我正在使用一个数组来存储这些字符输入。如果可能,我想简化这个可能过多的 "if" 语句。
我的声明:
reg [7:0] input_param [1:12]; // Array w/8-bit wide variables
localparam ASCII_0 = 8'h30;
// ASCII to Hex Conversion
always@(input_param)
begin
if (input_param[1] == ASCII_0) input_param_h[1] = 4'h0;
else if(input_param[1] == ASCII_1) input_param_h[1] = 4'h1;
...
else if(input_param[1] == ASCII_F) input_param_h[1] = 4'hF;
这将继续我允许的输入数量:
if (input_param[12] == ASCII_0) input_param_h[2] = 4'h0;
else if(input_param[12] == ASCII_1) input_param_h[2] = 4'h1;
...
else if(input_param[12] == ASCII_F) input_param_h[2] = 4'hF;
end
您可以在 for
循环中使用 case
语句:
integer i;
always @* begin
for (i=1; i<=12; i=i+1) begin
case (input_param[i])
ASCII_0: input_param_h[i] = 4'h0;
ASCII_1: input_param_h[i] = 4'h1;
//
ASCII_F: input_param_h[i] = 4'hF;
endcase
end
end
case
比 if/else
.
for
循环比12个case
语句简单;循环将展开成 12 个并行的 case
语句。
always @*
比使用带有信号的灵敏度列表更简单。