Исходный код для тестовой среды
`timescale 10ns/1ns
module mux_tb();
integer j;
reg clk,rst,bistForDeterministic,enable,bistMode,deterministicEnable;
wire [127:0] valueI;
reg [7:0] iterate;
wire [9:0] seedValue;
MemoryModule mm (iterate,clk,rst,bistMode,deterministicEnable,seedValue);
mux m (clk,rst,bistMode,enable,seedValue,valueI);
always #3 clk = ~clk;
initial begin
j=0;
clk = 0;
rst = 1;
#5 rst = 0;
iterate=0;
bistForDeterministic = 1;
deterministicEnable=1;
bistMode = 1;
enable = 0;
end
always@(negedge clk)begin : break_block
if(j==100)begin
disable break_block;
end
if((bistMode==1) && (bistForDeterministic==1))begin
@(seedValue)begin
//$display("%h %d",seedValue,$time);
iterate<=iterate+1;
deterministicEnable<=0;
enable<=1;
end
@(valueI)begin
$display("%h %d",valueI,$time);
end
end
j=j+1;
end
endmodule
Исходный код для модуля памяти
module MemoryModule (input wire[7:0] iterate, input wire clk, input wire rst, input wire bistMode,input wire deterministicEnable,output reg[9:0] seedValue);
reg [9:0] seedVal[0:2];
always@(posedge clk)begin
if(rst)begin
seedValue<=10'b0000000000;
seedVal[0]<=10'b0000000000;
seedVal[1]<=10'b0000000000;
seedVal[2]<=10'b0000000000;
end
else begin
seedVal[0]<=10'b1001100101;
seedVal[1]<=10'b1111111111;
seedVal[2]<=10'b0000011111;
end
if((bistMode==1) && (deterministicEnable==1))begin
seedValue=seedVal[iterate];
end
end
endmodule
Исходный код для модуля мультиплексирования
module mux(input wire clk, input wire rst, input wire bistMode, input wire enable, input wire[9:0] seedValue, output reg[127:0] valueO);
reg[31:0] myPatterns[0:3],Temporary;
integer i,j;
reg [9:0] flag;
always begin
@(enable)begin
flag=seedValue;
if((flag!=10'bxxxxxxxxxx) || (flag!=10'b0000000000))begin
Temporary={12'b000000000000,seedValue};
flag=10'b0000000000;
end
else begin
Temporary=32'b11111111111111111111111111111111;
end
end
end
always@(posedge clk)begin : break_block
if(rst)begin
myPatterns[0]<=32'b00000000000000000000000000000000;
myPatterns[1]<=32'b00000000000000000000000000000000;
myPatterns[2]<=32'b00000000000000000000000000000000;
myPatterns[3]<=32'b00000000000000000000000000000000;
Temporary <= 32'b00000000000000000000000000000000;
end
else begin
if((bistMode==1) && (enable==1))begin
for(i=0;i<4;i=i+1)begin
Temporary = {(Temporary[31] ^ Temporary[25] ^ Temporary[22] ^ Temporary[21] ^ Temporary[15] ^ Temporary[11] ^ Temporary[10] ^ Temporary[9] ^ Temporary[7] ^ Temporary[6] ^ Temporary[4] ^ Temporary[3] ^ Temporary[1] ^ Temporary[0]), Temporary[31:1]};
myPatterns[i] = Temporary;
end
valueO = {myPatterns[3],myPatterns[2],myPatterns[1],myPatterns[0]};
end
end
end
endmodule