0

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

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 に変換して、コンピュータに供給される出力レジスタに格納することです。

4

2 に答える 2