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.

156 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
//устанавливаем экземпляр тестируемого модуля
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);
//моделируем сигнал тактовой частоты
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
//от начала времени...
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
/*
//через временной интервал "50" подаем сигнал сброса
#50 SCL = 1;
//еще через время "4" снимаем сигнал сброса
#4 SCL = 0;
//пауза длительностью "50"
#50;
//ждем фронта тактовой частоты и сразу после нее подаем сигнал записи
@(posedge clk)
#0
begin
SDA = 0;
//wr = 1'b1;
end
//по следующему фронту снимаем сигнал записи
@(posedge clk)
#0
begin
SDA = 1;
//wr = 1'b0;
end
end
*/
//заканчиваем симуляцию в момент времени "400"
initial
begin
#11500 $finish;
end
//создаем файл VCD для последующего анализа сигналов
initial
begin
$dumpfile("out.vcd");
$dumpvars(0,test_counter);
end
//наблюдаем на некоторыми сигналами системы
initial
$monitor($stime,, clk,,, SCL,, SDA,, I2C_ACTIVITY);
endmodule