我有一个问题(由于缺乏理解),我在另一个文件中构建了一个模块,并希望我的更高级别(不一定是顶级)模块通过提供输入和获取模块的输出来使用它。下面是简化形式的代码片段,以说明我的问题。
module translate_packet_data(rx_packet, packet_size, do_analysis, output_ascii);
reg [7:0] gps_utc_hour;
reg [7:0] gps_utc_min;
reg [7:0] gps_utc_sec;
reg [31:0] gps_utc_milli;
wire [3:0] utc_hour_hundreds_w,utc_hour_tens_w,utc_hour_ones_w;
reg [3:0] utc_hour_hundreds,utc_hour_tens,utc_hour_ones;
binary8_to_BCD utc_hour_BCD(
.binary(gps_utc_hour),
.Hundreds(utc_hour_hundreds_w),
.Tens(utc_hour_tens_w),
.Ones(utc_hour_ones_w)
);
always @ (posedge do_analysis) begin
//Do all my logic stuff
gps_utc_hour = rx_packet[pointer-:8];
//more logic stuff, but thats besides the point
//Here is where illegal stuff happen that I don't know how to get around, even though it is synthesizable, the simulation reveals it is wrong
utc_hour_tens = utc_hour_tens_w;
utc_hour_tens = utc_hour_tens + 48;
reg_output_ascii = {reg_output_ascii, utc_hour_tens};
end
正如您可能从我的代码片段中看到的那样,utc_hour_tens_w 尚未解决,我将从模拟中获得 XXXX。所以我的问题是,如果我想在这个模块中维护所有翻译逻辑,我该如何解决这个问题?(是的,我知道这个代码不起作用,这是对问题相关部分的粗略复制/粘贴工作,完整代码有大约 600 行你都不想看到)
目标主要是获取一个数据包,提取有意义的部分,将其转换为 BCD,然后将其转换为 ASCII 并将其存储到将馈送到计算机的输出寄存器中。