cardbus_wrapper.tf
来自「VHDLVERILOG语言实现的CARDBUS的IP源码,已经实现现场应用」· TF 代码 · 共 829 行 · 第 1/3 页
TF
829 行
@(posedge CLK);
if (!pad_clk_stopped)
$display("CLK MGMT Test #2 - pad_clk_stopped = 0 ... PASSED.");
else
$display("CLK MGMT Test #2 - pad_clk_stopped = 1 ... FAILED.");
// clk_cnt =0 --> 1
tb_clkrun_n <= 1'b1;
repeat (1) @(posedge CLK);
if (!pad_clk_stopped)
$display("CLK MGMT Test #3 - pad_clk_stopped = 0 ... PASSED.");
else
$display("CLK MGMT Test #3 - pad_clk_stopped = 1 ... FAILED.");
// clk_cnt = 1-->2
repeat (1) @(posedge CLK);
// clk_cnt =2
tb_clkrun_oe <= 1'b0;
tb_clkrun_n <= 1'b0;
@(posedge CLK);
if (pad_clk_stopped)
$display("CLK MGMT Test #4 - pad_clk_stopped = 1 ... PASSED.");
else
$display("CLK MGMT Test #4 - pad_clk_stopped = 0 ... FAILED.");
$display("Clock Management Test#4 finished at %0d", $time);
// clk resume for one clock cycle
// same as tb_clkrun_oe <= 1'b1 & tb_clkrun_n <= 1'0;
// clk_cnt =2 --> 3
pad_clk_resume <= 1'b1;
@(posedge CLK);
if (pad_clk_stopped)
$display("CLK MGMT Test #5 - pad_clk_stopped = 1 ... PASSED.");
else
$display("CLK MGMT Test #5 - pad_clk_stopped = 0 ... FAILED.");
// clk_cnt =3 --> 2
pad_clk_resume <= 1'b0;
// same as tb_clk_run_n <= 1'b1;
@(posedge CLK);
//so set up for the next state and then check the current test case
if (pad_clk_stopped)
$display("CLK MGMT Test #6 - pad_clk_stopped = 1 ... PASSED.");
else
$display("CLK MGMT Test #6 - pad_clk_stopped = 0 ... FAILED.");
// clk_cnt =2 --> 3
pad_clk_resume <= 1'b1;
// same as tb_clk_run_n <= 1'b0;
@(posedge CLK);
if (pad_clk_stopped)
$display("CLK MGMT Test #7 - pad_clk_stopped = 1 ... PASSED.");
else
$display("CLK MGMT Test #7 - pad_clk_stopped = 0 ... FAILED.");
// clk_cnt = 3 --> 0
pad_clk_resume <= 1'b1;
@(posedge CLK);
if (pad_clk_stopped)
$display("CLK MGMT Test #8 - pad_clk_stopped = 1 ... PASSED.");
else
$display("CLK MGMT Test #8 - pad_clk_stopped = 0 ... FAILED.");
$display("Clock Management Test#8 finished at %0d", $time);
// clk resume for two clock cycles to resume the clock
// clk_cnt =3 --> 0
pad_clk_resume <= 1'b0;
tb_clkrun_oe <= 1'b1;
tb_clkrun_n <= 1'b0;
repeat (1) @(posedge CLK);
// @(posedge CLK);
// #HalfCyclePCI;
// return to normal
if (!pad_clk_stopped)
$display("CLK MGMT Test #9 - pad_clk_stopped = 0 ... PASSED.");
else
$display("CLK MGMT Test #9 - pad_clk_stopped = 1 ... FAILED.");
$display("Clock Management Test#9 finished at %0d", $time);
// --------------------------------------------------------//
$display("\n\nTest CardBus Locked Transfers at %0d\n", $time);
$display("\nIRDY protocol errors expected (2x)");
// --------------------------------------------------------//
//signal lock xfer, check lock detect
//access as owner, check result.
//access by non owner, check result
//signal unlock, check result
/* Test Locked Transfer - Test 1
- unlocked, and not target of access
- should not respond to access
*/
// unlock and check result
pad_CBLOCK_n <= 1'b1;
// target should be unlocked and owner_access should be 0
master_2.target_access_pf(32'hAB000000 + EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
if (pad_locked || pad_owner_access)
$display("Locked Transfers Test 1 - pad_locked or pad_owner_access = 1 ... FAILED.");
else
$display("Locked Trasnfers Test 1 ... PASSED.");
/* Test Locked Transfer - Test 2
- unlocked, target of access but do not lock
- locked and owner_access should be deasserted
*/
// unlock and check result
pad_CBLOCK_n <= 1'b1;
// target should be unlocked and owner_access should be 0
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
if (pad_locked || pad_owner_access)
$display("Locked Transfers Test 2 - pad_locked or pad_owner_access = 1 ... FAILED.");
else
$display("Locked Trasnfers Test 2 ... PASSED.");
/* Test Locked Transfer - Test 3
- unlocked, access exclusively
- locked and owner_access should both be asserted
*/
fork: Test3 //send control pulse to both begin-ends
begin
//do the memory access - clear event notice -
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
end
begin
//change value of CBLOCK#
repeat (1) @(posedge CLK);
@(negedge CLK);
pad_CBLOCK_n <= 1'b0;
end
join
if (pad_locked)
$display("Locked Transfers Test #3a - pad_locked = 1 ... PASSED.");
else
$display("Locked Transfers Test #3a - pad_locked = 0 ... FAILED.");
@(posedge CLK);
if (pad_owner_access)
$display("Locked Transfers Test #3b - pad_owner_access = 1 ... PASSED.");
else
$display("Locked Transfers Test #3b - pad_owner_access = 0 ... FAILED.");
/* Test Locked Transfer - Test 4
- locked, access by owner
- locked should be asserted and owner_access should be asserted
*/
fork: Test4 //send control pulse to both begin-ends
begin
//do the memory access - clear event notice -
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
end
begin
//change value of CBLOCK#
@(posedge CLK);
pad_CBLOCK_n <= 1'b1;
repeat (2) @(posedge CLK);
@(negedge CLK);
pad_CBLOCK_n <= 1'b0;
end
join
if (pad_locked)
$display("Locked Transfers Test #4a - pad_locked = 1 ... PASSED.");
else
$display("Locked Transfers Test #4a - pad_locked = 0 ... FAILED.");
@(posedge CLK);
if (pad_owner_access)
$display("Locked Transfers Test #4b - pad_owner_access = 1 ... PASSED.");
else
$display("Locked Transfers Test #4b - pad_owner_access = 0 ... FAILED.");
/* Test Locked Transfer - Test 5
- locked, access by non-owner
- locked should be asserted and owner_access should not be asserted
*/
// do another memory access
// target should remained locked and owner_access should be 0
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
if (pad_locked)
$display("Locked Transfers Test #5a - pad_locked = 1 ... PASSED.");
else
$display("Locked Transfers Test #5a - pad_locked = 0 ... FAILED.");
@(posedge CLK);
if (!pad_owner_access)
$display("Locked Transfers Test #5b - pad_owner_access = 0 ... PASSED.");
else
$display("Locked Transfers Test #5b - pad_owner_access = 1 ... FAILED.");
/* Test Locked Transfer - Test 6
- locked, not target of access
- locked should be asserted and owner_access should not be asserted
*/
// target should be locked and owner_access should be 0
master_2.target_access_pf(32'hAB000000 + EVENT_OFFSET,32'hFFFF,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
if (pad_locked)
$display("Locked Transfers Test #6a - pad_locked = 1 ... PASSED.");
else
$display("Locked Transfers Test #6a - pad_locked = 0 ... FAILED.");
@(posedge CLK);
if (!pad_owner_access)
$display("Locked Transfers Test #6b - pad_owner_access = 0 ... PASSED.");
else
$display("Locked Transfers Test #6b - pad_owner_access = 1 ... FAILED.");
// unlock
@(posedge CLK);
pad_CBLOCK_n <= 1'b1;
// --------------------------------------------------------//
$display("\n\nTest CardBus CIS at %0d\n", $time);
// --------------------------------------------------------//
master_2.target_access_pf(CardBus_BAR+CIS_OFFSET_0,32'h04030201,MEM_READ,8'hFF,1'b0,1'b0,1,0,0,1'b0, pass, 1'b0);
@(posedge CLK);
master_2.target_access_pf(CardBus_BAR+CIS_OFFSET_1,32'h08070605,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
master_2.target_access_pf(CardBus_BAR+CIS_OFFSET_2,32'h0C0B0A09,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
master_2.target_access_pf(CardBus_BAR+CIS_OFFSET_3,32'h100F0E0D,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
@(posedge CLK);
master_2.target_access_pf(CardBus_BAR+CIS_OFFSET_4,32'h22000000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (5) @(posedge CLK);
$display("\nCardBus Wrapper Test Bench Finished!!!\n");
//$stop;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?