モジュールを別のファイルにビルドし、入力を提供してモジュールの出力を取得することで、より高いレベル (必ずしもトップレベルではない) モジュールにそれを使用させたいという問題があります (理解不足による)。以下は、私の問題を説明するための簡略化された形式のコードのスニペットです。
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 に変換して、コンピュータに供給される出力レジスタに格納することです。