You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
2.5 KiB
128 lines
2.5 KiB
module test_counter;
|
|
|
|
reg clk, SCL, SDA;
|
|
wire SDA_OUT, I2C_ACTIVITY, I2C_READ, ACK, WR;
|
|
wire [7:0] received_byte, byte_to_transmit;
|
|
reg [7:0] to_tx = 8'hC5;
|
|
wire [8:0] i2c_counter;
|
|
|
|
reg [8:0] i, j;
|
|
|
|
reg [8:0] data_to [4:0]/* = { 9'h98, 9'h00, 9'h23, 9'h10, 9'h98 }*/;
|
|
//reg [8:0] data_to = 9'h98;
|
|
|
|
// CREATING MODULE INSTANCE
|
|
i2c_slave i2c(clk, SCL, SDA, SDA_OUT, I2C_ACTIVITY, I2C_READ, ACK, WR, received_byte, byte_to_transmit, i2c_counter);
|
|
//module i2c_slave (input CLK,
|
|
// input SCL, /*inout SDA,*/SDA_IN, output SDA_OUT, // FOR TEST
|
|
// output IS_TRANSMISSION, output IS_READ, output IS_ACK, output WR, //output ACK_MASTER_CTRL,
|
|
// output reg [7:0] RECEIVED_BYTE, input [7:0] BYTE_TO_TRANSMIT,
|
|
// output [(MAX_I2C_TRANSACTION_EXP2-1):0] COUNTER);
|
|
|
|
// SIMULATING TACT SIGNAL
|
|
always
|
|
begin
|
|
#1 clk = ~clk;
|
|
|
|
|
|
/*data_to[0] = 9'hd0; // TX (ADRESS 34)
|
|
data_to[1] = 9'h00;
|
|
data_to[2] = 9'h46;
|
|
data_to[3] = 9'h10;
|
|
data_to[4] = 9'h98;*/
|
|
|
|
data_to[0] = 9'hd2; // RX (ADRESS 34)
|
|
data_to[1] = 9'h1FE;
|
|
data_to[2] = 9'h1FE;
|
|
data_to[3] = 9'h1FE;
|
|
data_to[4] = 9'h1FF;
|
|
|
|
end
|
|
|
|
// I2C CLOCK PARAMS
|
|
parameter SDA_STT = 30;
|
|
parameter SCL_H = 100;
|
|
parameter SCL_L1 = 70;
|
|
parameter SCL_L2 = 30;
|
|
|
|
assign byte_to_transmit = to_tx;
|
|
|
|
initial
|
|
begin
|
|
//byte_to_transmit = 8'hC5;
|
|
clk = 0;
|
|
SCL = 1;
|
|
//SDA_CTRL = 1;
|
|
to_tx = 8'hC5;
|
|
SDA = 1;
|
|
|
|
|
|
#500 SDA = 0;
|
|
#SDA_STT SCL = 0;
|
|
for (i = 0; i < 5; i++)
|
|
begin
|
|
#200 for (j = 0; j < 9; j++)
|
|
begin
|
|
#SCL_L1 SDA = data_to[i][8-j]; // first bit start
|
|
#SCL_L2 SCL = 1; // CLOCK of first bit
|
|
#SCL_H SCL = 0;
|
|
end
|
|
end
|
|
#200 SDA = 0;
|
|
#200 SCL = 1;
|
|
#40 SDA = 1;
|
|
|
|
/*
|
|
#SCL_L1 SDA = 1; // first bit start
|
|
#SCL_L2 SCL = 1; // CLOCK of first bit
|
|
#SCL_H SCL = 0; // bit 7
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 6
|
|
|
|
#SCL_L1 SDA = 1;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 5
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 4
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 4
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 3
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 2
|
|
|
|
#SCL_L1 SDA = 0;
|
|
#SCL_L2 SCL = 1;
|
|
#SCL_H SCL = 0; // 1
|
|
*/
|
|
end
|
|
|
|
// END SIMULATION AT TIME "11500"
|
|
initial
|
|
begin
|
|
#11500 $finish;
|
|
end
|
|
|
|
// CREATING VCD FILE FOR NEXT ANALYZE
|
|
initial
|
|
begin
|
|
$dumpfile("out.vcd");
|
|
$dumpvars(0,test_counter);
|
|
end
|
|
|
|
// WATCHING SOME SIGNALS
|
|
initial
|
|
$monitor($stime,, clk,,, SCL,, SDA,, I2C_ACTIVITY);
|
|
|
|
endmodule
|