Verilog 中的小端表示法

问题描述 投票:0回答:1

我在维护位顺序符号方面遇到一些困难,想验证我在 Vivado/Verilog 中分配和连接电线的方式。

基本上,我从 128 根线的传入输入开始,每根线都是 14 位 [13:0]。

我通过这样做将所有这些并行线连接成串行流:

module DAC_slave_rearrange(  
    input clk, 
    input [13:0] data_im0,
    input [13:0] data_im1,
    input [13:0] data_im2,...
    output [2047:0] s12_i  );
wire [13:0] in_im_tmp [127:0];
assign in_im_tmp[0]  = data_im0;
assign in_im_tmp[1]  = data_im1; ....
   
genvar iter; 
    generate
    for (iter = 0; iter < 128;  iter = iter +1) begin
        assign s12_i[16*iter +: 16] = {in_im_tmp[iter],2'b00} ; //{in_re_tmp[iter], 2'b00 } ;
    end
    endgenerate

这 128 条线在 32 MHz 时钟上运行。但我需要在 128 MHz 时钟上处理它们,因此我需要将 128 相转换为 16 相。由于采样率保持不变,因此不需要缓冲区,只需基本的数据操作。然而,似乎我的位顺序引起了问题。

module rate_convTx(
    input clk_32,
    input clk_128,
    input rst,
    input   enTx,
    input [2047:0] data_in_i,
    output [255:0] data_outi
)

parameter [3:0] IDLE = 4'd0, phase_1 = 4'd1, phase_2 = 4'd2, phase_3 = 4'd3, phase_4 = 4'd4, phase_5 = 4'd5, phase_6 = 4'd6, phase_7 =4'd7, phase_8 = 4'd8;
    reg [3:0] state;
    reg [2047:0] buffer_32_i;
    reg [255:0] buffer_128i;


assign data_outi = buffer_128i;







always @ (posedge clk_32) begin
    if(rst) begin
        buffer_32_i <= 2048'b0;
    end else begin
        buffer_32_i <= data_in_i;
    end
end



 always @ (posedge clk_128) begin
        if(rst)begin
            buffer_128i <= 256'b0;
            buffer_128q <= 256'b0;
        end else begin
            case(state)
                phase_8: begin buffer_128i <= buffer_32_i[255:0]  ;end
                phase_7: begin buffer_128i <= buffer_32_i[511:256]  ; end
                phase_6: begin buffer_128i <= buffer_32_i[767:512]  ;end
                phase_5: begin buffer_128i <= buffer_32_i[1023:768]  ; end
                phase_4: begin buffer_128i <= buffer_32_i[1279:1024] ; end
                phase_3: begin buffer_128i <= buffer_32_i[1535:1280]; end
                phase_2: begin buffer_128i <= buffer_32_i[1791:1536]; end
                phase_1: begin buffer_128i <= buffer_32_i[2047:1792]; end
                default : begin buffer_128i <= 256'b0; buffer_128q <= 256'b0; end
            endcase
       end
   end

我通过保留符号 [MSB:LSB](小端)来确保在整个代码中保持字节序,但似乎位顺序引起了问题,有什么想法吗?

verilog vhdl hardware fpga vivado
1个回答
0
投票

在rate_convTx模块中,case语句依赖于一个名为state的变量。状态被声明但从未分配,并且永远不会改变。

© www.soinside.com 2019 - 2024. All rights reserved.