二输入寄存器的赋值问题
时间:10-02
整理:3721RD
点击:
在写AES加密的时候碰到的问题。
需要用一个线性反馈移位寄存器产生的控制信号来控制两个寄存器矩阵,控制信号决定了两个寄存器矩阵的输入。
现在的问题是:
这三个寄存器都是沿上升沿触发,也就是说时钟上升沿以后,寄存器的控制信号会发生变化,请问这样会不会导致寄存器的输出发生变化?
自己想的解决方案是讲接入线性反馈移位寄存器的时钟反相,这样可以让寄存器的控制信号在时钟上升沿前后都不发生变化。 ?
希望前辈来出来指导一下下
这个是线性反馈移位寄存器的描述:
控制单元是组合逻辑:
问题是,每个时钟信号上升沿过后,控制信号也被改变了,这样貌似可以通过仿真,但是实际电路里又该怎么对待这个这个问题?
需要用一个线性反馈移位寄存器产生的控制信号来控制两个寄存器矩阵,控制信号决定了两个寄存器矩阵的输入。
现在的问题是:
这三个寄存器都是沿上升沿触发,也就是说时钟上升沿以后,寄存器的控制信号会发生变化,请问这样会不会导致寄存器的输出发生变化?
自己想的解决方案是讲接入线性反馈移位寄存器的时钟反相,这样可以让寄存器的控制信号在时钟上升沿前后都不发生变化。 ?
希望前辈来出来指导一下下
我也写过AES的verilog,怎么没有遇到这个问题,还有就是,我理解不清你的问题,贴段代码就好了
这个是两个寄存器矩阵内部的某个寄存器的描述:
- always @ (posedge clk or negedge rst_n) begin if(!rst_n) S10 <= 8'h00; else if(en_row_shift) S10 <= S11; else if(en_horizontalshift) S10 <= S11; end
这个是线性反馈移位寄存器的描述:
- reg [4:0] lfsr;
- always @(negedge clk or negedge reset_n)if(!reset_n) lfsr <= 5'b00010;else begin lfsr[4:1] <= lfsr[3:0]; lfsr[0] <= lfsr[4]^lfsr[0]; end
控制单元是组合逻辑:
- case(lfsr) //be aware the LFSR will run right after the second posedge of clk //so... also we can one signal to make the lfsr not run until all the 5'h02: //data has been put, and secure the LFSR module. begin en_horizontalshift_keyarray <=1'b0; //KeyArray w[i] (i mod 4 = 0) generation en_vertical_shift <=1'b1; //take four clocks,1st KeyGeneration en_k00_xor <=8'h00;// loadkey <=1'b0; // en_row_shift <=1'b1; // Row Shift is done en_horizontalshift_statearray<=1'b0; // en_addroundkey <=1'b0; //do not care anymore. end
问题是,每个时钟信号上升沿过后,控制信号也被改变了,这样貌似可以通过仿真,但是实际电路里又该怎么对待这个这个问题?
仿真通过的话,实际问题应该就不大了
