cardbus_wrapper.tf
来自「VHDLVERILOG语言实现的CARDBUS的IP源码,已经实现现场应用」· TF 代码 · 共 829 行 · 第 1/3 页
TF
829 行
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h801F,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CSTSCHG)
$display("...Event#3 forced and CSTSCHG not asserted, PASSED");
else begin
$display("...CSTSCHG asserted, FAILED!!!!!!!!!!!");
$stop;
end
//write to present state and event reg, read to make sure didn't change
$display("Test Invalid Writes to Function Event and State Registers at %0d", $time);
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b0; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b0; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b0; // bit 15
repeat (2) @(posedge CLK);
// 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);
repeat (2) @(posedge CLK);
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b1; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b1; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b1; // bit 15
repeat (2) @(posedge CLK);
// read event register
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h000A,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
// read present state register
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h800A,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
// write 0 to event register (should have no effect)
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h0,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
// write to present state register (should have no effect)
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h12345678,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
// read event register
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h000A,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
// read present state register
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h800A,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
$display("...PASSED");
repeat (2) @(posedge CLK);
// 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);
/* ctu notes -------
Test CardBus Interrupt Events (4)
Test 1: Enable Intr, set intr_ps high, CINT_n should be asserted
Test 2: Enable Intr, force intr function event high, CINT_n should be asserted
Test 3: Disable Intr, set intr_ps high, CINT_n should NOT be asserted
Test 4: Disable Intr, force intr function event high, CINT_n should NOT be asserted
------- */
// --------------------------------------------------------//
$display("\n\nTest CardBus Interrupt at %0d\n\n", $time);
// --------------------------------------------------------//
//enable INTR, toggle present state intr requests, check interrupt
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b0; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b0; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b0; // bit 15
repeat (2) @(posedge CLK);
// 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);
repeat (2) @(posedge CLK);
// write to mask offset, enable INTR and disable everything else
$display("Mask all events except INTR at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h8000,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
$display("Change present state pad_intr input at %0d", $time);
pad_intr <= 1'b1; // bit 15
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h0000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h8000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CINT_n)
$display("Interrupt Test #1 - pad_CINT_n asserted ... PASSED.");
else
$display("Interrupt Test #1 - pad_CINT_n not asserted ... FAILED.");
//enable INTR, force intr requests, check interrupt
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b0; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b0; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b0; // bit 15
// 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);
repeat (2) @(posedge CLK);
// write to force event register
$display("Force INTR event at %0d", $time);
master_2.target_access_pf(CardBus_BAR+FORCE_OFFSET,32'h8000,MEM_WRITE,8'hF8,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h8000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h0000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CINT_n)
$display("Interrupt Test #2 - pad_CINT_n asserted ... PASSED.");
else
$display("Interrupt Test #2 - pad_CINT_n not asserted ... FAILED.");
//disable INTR, toggle intr requests, check interrupt
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b0; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b0; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b0; // bit 15
repeat (2) @(posedge CLK);
// 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);
repeat (2) @(posedge CLK);
// write to mask offset, disable everything
$display("Mask all events at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h0000,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
$display("Change present state pad_intr input at %0d", $time);
pad_intr <= 1'b1; // bit 15
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h0000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h8000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (pad_CINT_n)
$display("Interrupt Test #3 - pad_CINT_n not asserted ... PASSED.");
else
$display("Interrupt Test #3 - pad_CINT_n asserted ... FAILED.");
// force intr requests, check interrupt
pad_wp <= 1'b0; // bit 0
pad_ready <= 1'b0; // bit 1
pad_bvd[2] <= 1'b0; // bit 2
pad_bvd[1] <= 1'b0; // bit 3
pad_gwake <= 1'b0; // bit 4
pad_intr <= 1'b0; // bit 15
// 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);
repeat (2) @(posedge CLK);
// write to force event register
$display("Force INTR event at %0d", $time);
master_2.target_access_pf(CardBus_BAR+FORCE_OFFSET,32'h8000,MEM_WRITE,8'hF8,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+EVENT_OFFSET,32'h8000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
master_2.target_access_pf(CardBus_BAR+STATE_OFFSET,32'h0000,MEM_READ,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (pad_CINT_n)
$display("Interrupt Test #4 - pad_CINT_n not asserted ... PASSED.");
else
$display("Interrupt Test #4 - pad_CINT_n asserted ... FAILED.");
// --------------------------------------------------------//
$display("\n\nTest CardBus Audio at %0d\n", $time);
// --------------------------------------------------------//
// 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);
repeat (2) @(posedge CLK);
//supply BAM and PWM
pad_BAM <= 1'b0;
pad_PWM <= 1'b1;
//disable both, check CAUDIO_n, should be inactive -> low
// write to mask offset, disable everything
$display("Mask all events, disable BAM and PWM at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h0000,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CAUDIO)
$display("CAUDIO Test #1 - pad_CAUDIO not asserted ... PASSED.");
else
$display("CAUDIO Test #1 - pad_CAUDIO asserted ... FAILED.");
//enable both, check CAUDIO_n, should be inactive -> low
// write to mask offset, enable bit 5 and 6
$display("Enable BAM and PWM at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h0060,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CAUDIO)
$display("CAUDIO Test #2 - pad_CAUDIO not asserted ... PASSED.");
else
$display("CAUDIO Test #2 - pad_CAUDIO asserted ... FAILED.");
//enable only BAM, check CAUDIO
// write to mask offset, enable bit 5, BAM
$display("Enable BAM at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h0020,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CAUDIO)
$display("CAUDIO Test #3a - pad_CAUDIO = pad_BAM ... PASSED.");
else
$display("CAUDIO Test #3a - pad_CAUDIO != pad_BAM ... FAILED.");
pad_BAM <= 1'b1;
pad_PWM <= 1'b0;
repeat (2) @(posedge CLK);
if (pad_CAUDIO)
$display("CAUDIO Test #3b - pad_CAUDIO = pad_BAM ... PASSED.");
else
$display("CAUDIO Test #3b - pad_CAUDIO != pad_BAM ... FAILED.");
//enable only PWM, check CAUDIO
// write to mask offset, enable bit 6, PWM
$display("Enable PWM at %0d", $time);
master_2.target_access_pf(CardBus_BAR+MASK_OFFSET,32'h0040,MEM_WRITE,8'hFF,1'b0,1'b0,1,1,1,1'b0, pass, 1'b0);
repeat (2) @(posedge CLK);
if (!pad_CAUDIO)
$display("CAUDIO Test #4a - pad_CAUDIO = pad_PWM ... PASSED.");
else
$display("CAUDIO Test #4a - pad_CAUDIO != pad_PWM ... FAILED.");
pad_BAM <= 1'b0;
pad_PWM <= 1'b1;
repeat (2) @(posedge CLK);
if (pad_CAUDIO)
$display("CAUDIO Test #4b - pad_CAUDIO = pad_PWM ... PASSED.");
else
$display("CAUDIO Test #4b - pad_CAUDIO != pad_PWM ... FAILED.");
// --------------------------------------------------------//
$display("\n\nTest CardBus Clock Management at %0d\n", $time);
// --------------------------------------------------------//
//signal stop clock
//resume request after stopped, check CCLKRUN, supply clock
//signal stop clock
//resume request before stopped, check CCLKRUN, supply clock
if (!pad_clk_stopped)
$display("CLK MGMT Test #1 - pad_clk_stopped = 0 ... PASSED.");
else
$display("CLK MGMT Test #1 - pad_clk_stopped = 1 ... FAILED.");
// signal stop clock
// clk_cnt =0 --> 1
//#2
// @(negedge CLK);
@(posedge CLK);
tb_clkrun_oe <= 1'b1;
tb_clkrun_n <= 1'b1;
// @(negedge CLK);
//repeat (10) @(posedge CLK);
repeat (1) @(posedge CLK);
// need to shift and interleave the tests and the actual set up of values
// @(negedge CLK);
// clk_cnt =1 --> 0
tb_clkrun_n <= 1'b0;
// @(negedge CLK);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?