微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 二输入寄存器的赋值问题

二输入寄存器的赋值问题

时间:10-02 整理:3721RD 点击:
在写AES加密的时候碰到的问题。
需要用一个线性反馈移位寄存器产生的控制信号来控制两个寄存器矩阵,控制信号决定了两个寄存器矩阵的输入。
现在的问题是:
这三个寄存器都是沿上升沿触发,也就是说时钟上升沿以后,寄存器的控制信号会发生变化,请问这样会不会导致寄存器的输出发生变化?
自己想的解决方案是讲接入线性反馈移位寄存器的时钟反相,这样可以让寄存器的控制信号在时钟上升沿前后都不发生变化。 ?

希望前辈来出来指导一下下

我也写过AES的verilog,怎么没有遇到这个问题,还有就是,我理解不清你的问题,贴段代码就好了



  这个是两个寄存器矩阵内部的某个寄存器的描述:

  1.         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

复制代码



这个是线性反馈移位寄存器的描述:

  1. reg        [4:0]        lfsr;
  2. 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

复制代码



控制单元是组合逻辑:

  1.   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                           

复制代码



问题是,每个时钟信号上升沿过后,控制信号也被改变了,这样貌似可以通过仿真,但是实际电路里又该怎么对待这个这个问题?

仿真通过的话,实际问题应该就不大了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top