【问题标题】:How to generate random patterns using LFSR and i am using different partial seed value如何使用 LFSR 生成随机模式,我正在使用不同的部分种子值
【发布时间】:2020-05-03 15:17:05
【问题描述】:

正如我所说,seedValue 线持有一个 10 位的部分种子,我想将其分配给寄存器,当第一个信号为 1 时,它进入块,并且该块的最后一条语句将 seedValue 线分配给寄存器 temp 所以当 if 条件 if((temp!=10'b0000000000) || (temp!=10'bxxxxxxxxxx)) 执行时,它进入块,然后将 seedValue 与 12'b000000000000 连接,然后我得到我的 32 位在将寄存器 temp 分配为零值之后,我希望通过该种子值从 LFSR 获得随机模式,以便必须执行 else 块,我希望从中获得随机模式,但以下代码不起作用。我是 Verilog 和 FPGA 世界的新手,请有人帮助我。以下代码是用 Verilog 编写的。

module TestPatternGenerator(input wire clk, input wire rst, input wire enable, 
input wire sel, input wire[9:0] seedValue, output reg[127:0] valueO);

integer i;
reg [31:0] patternGenerate[0:3],tempOne;    
reg [9:0] temp;


always @(posedge clk)begin

    if((sel == 1)&&(enable==1))begin 

        if(rst)begin
            valueO = 128'b0;
            patternGenerate[0]<=32'b0;
            patternGenerate[1]<=32'b0;
            patternGenerate[2]<=32'b0;
            patternGenerate[3]<=32'b0;
            tempOne <= 32'b11111111111111111111111111111111;
            temp <= seedValue;
        end

        else if((temp!=10'b0000000000) || (temp!=10'bxxxxxxxxxx))begin
                tempOne <= {12'b000000000000,seedValue};
                $display("%h",tempOne);
                temp <= 10'b0000000000;
        end 

        else begin
            for(i=0;i<4;i=i+1)begin
                tempOne = {(tempOne[31] ^ tempOne[25] ^ tempOne[22] ^ tempOne[21] ^ tempOne[15] ^ tempOne[11] ^ tempOne[10] ^ tempOne[9] ^ tempOne[7] ^ tempOne[6] ^ tempOne[4] ^ tempOne[3] ^ tempOne[1] ^ tempOne[0]), tempOne[31:1]};
                patternGenerate[i] = tempOne;
            end
            valueO = {patternGenerate[3],patternGenerate[2],patternGenerate[1],patternGenerate[0]};

        end

    end
    i=i+1;
end
endmodule

测试平台代码如下

`timescale 10ns/1ns
module test_controller();

integer j;
reg [127:0] key_byte,valueI,oraI;
wire [127:0] state_byte;
wire [9:0] seedValue;
wire [47:0] result;
reg [7:0] iterate;
reg clk,rst,bistForDeternimistic,deterministicEnable,ecryptionEnable,enable,decryptionEnable,decryptionSecondEnable,bistMode,bistForEncryption,bistForDecryption,oraEnable;


wire [127:0] state_out_dec,state_out_enc,state_second_dec;
wire [31:0] state_out_ora;
reg [31:0] signatureToMatch;
wire load,ready;


TestPatternGenerator tpg (clk,rst,enable,bistMode,seedValue,state_byte);


always #3 clk = ~clk;

initial begin
    bistMode <= 1;
    key_byte <= 128'h5468617473206D79204B756E67204675;
    bistForDecryption <= 0;
    clk<=0;
    rst<=1;
    #5 rst<=0;
    iterate<=0;
    j<=0;
    bistForDeternimistic<=1;
    enable<=1;
end

always@(negedge clk)begin : deterministic_block
        if(j==100)begin
            disable deterministic_block;
        end

        if((bistMode==1) && (bistForDeternimistic==1))begin

            @(state_byte)begin
                $display("%h   %d",state_byte,$time);
            end
        end

        j=j+1;
end
endmodule

输出我只得到第一个测试模式,但它应该生成 100 个测试模式。所以除了第一个测试模式,我没有得到其余的 99 个模式。

【问题讨论】:

    标签: verilog


    【解决方案1】:

    当我运行您的代码时,我看不到任何模式($display 语句未执行)。这是因为rst 为 1 时,enable 信号是未知的。

    如果我在 enable 设置为 1 之后延迟 rst 上升沿发生,我会看到 100 个模式:

    initial begin
        bistMode <= 1;
        key_byte <= 128'h5468617473206D79204B756E67204675;
        bistForDecryption <= 0;
        clk<=0;
        rst<=1;
        iterate<=0;
        j<=0;
        bistForDeternimistic<=1;
        enable<=1;
        #5 rst<=0;
    end
    

    这是部分输出:

    00000000000000000000000000000000                      3
    afffffff5fffffffbfffffff7fffffff                      9
    2affffff55ffffffabffffff57ffffff                     15
    72afffffe55fffffcabfffff957fffff                     21
    272affff4e55ffff9cabffff3957ffff                     27
    4272afff84e55fff09cabfff13957fff                     33
    

    您在问题中提到了seedValue 信号,但它是未驱动的(值z)。您将信号声明为wire,并且未分配时默认为z

    要在整个模拟期间使用已知值驱动它,您可以使用,例如:

    wire [9:0] seedValue = 1;
    

    如果您想像其他输入一样驱动它,您应该将其声明为reg

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 2015-10-04
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多