URL
https://opencores.org/ocsvn/pci/pci/trunk
Subversion Repositories pci
Compare Revisions
- This comparison shows the changes necessary to convert path
/pci/tags/rel_7/apps/test/rtl
- from Rev 114 to Rev 154
- ↔ Reverse comparison
Rev 114 → Rev 154
/verilog/test.v
0,0 → 1,752
// synopsys translate_off |
`include "timescale.v" |
// synopsys translate_on |
|
module test |
( |
pci_clk_i, |
clk_i, |
rst_i, |
|
wbm_cyc_o, |
wbm_stb_o, |
wbm_cab_o, |
wbm_we_o, |
wbm_adr_o, |
wbm_sel_o, |
wbm_dat_o, |
wbm_dat_i, |
wbm_ack_i, |
wbm_rty_i, |
wbm_err_i, |
|
wbs_cyc_i, |
wbs_stb_i, |
wbs_cab_i, |
wbs_we_i, |
wbs_adr_i, |
wbs_sel_i, |
wbs_dat_i, |
wbs_dat_o, |
wbs_ack_o, |
wbs_rty_o, |
wbs_err_o, |
|
// pci trdy, irdy and irdy enable inputs used to count number of transfers on pci bus |
pci_irdy_reg_i, |
pci_irdy_en_reg_i, |
pci_trdy_reg_i, |
pci_ad_reg_i |
); |
|
input pci_clk_i, |
clk_i, |
rst_i ; |
|
output wbm_cyc_o, |
wbm_stb_o, |
wbm_cab_o, |
wbm_we_o ; |
|
output [31:0] wbm_adr_o ; |
output [3:0] wbm_sel_o ; |
assign wbm_sel_o = 4'hF ; |
output [31:0] wbm_dat_o ; |
input [31:0] wbm_dat_i ; |
input wbm_ack_i, |
wbm_rty_i, |
wbm_err_i ; |
|
input wbs_cyc_i, |
wbs_stb_i, |
wbs_cab_i, |
wbs_we_i ; |
|
input [31:0] wbs_adr_i ; |
input [3:0] wbs_sel_i ; |
input [31:0] wbs_dat_i ; |
output [31:0] wbs_dat_o ; |
output wbs_ack_o, |
wbs_rty_o, |
wbs_err_o ; |
|
input pci_irdy_reg_i, |
pci_irdy_en_reg_i, |
pci_trdy_reg_i ; |
|
input [31:0] pci_ad_reg_i ; |
|
wire sel_registers = wbs_adr_i[12] ; |
wire sel_rams = ~wbs_adr_i[12] ; |
|
wire wbs_write = wbs_cyc_i & wbs_stb_i & wbs_we_i ; |
|
wire wbs_ram0_255_we = wbs_write & sel_rams & (wbs_adr_i[11:10] == 2'b00) ; |
wire wbs_ram256_511_we = wbs_write & sel_rams & (wbs_adr_i[11:10] == 2'b01) ; |
wire wbs_ram512_767_we = wbs_write & sel_rams & (wbs_adr_i[11:10] == 3'b10) ; |
wire wbs_ram768_1023_we = wbs_write & sel_rams & (wbs_adr_i[11:10] == 3'b11) ; |
|
reg sel_master_transaction_size, |
sel_master_transaction_count, |
sel_master_opcode, |
sel_master_base, |
sel_target_burst_transaction_count, |
sel_target_test_size, |
sel_target_test_start_adr, |
sel_target_test_start_dat, |
sel_target_test_error_detected, |
sel_master_num_of_wb_transfers, |
sel_master_num_of_pci_transfers, |
sel_master_test_start_dat, |
sel_master_test_size, |
sel_master_dat_err_detected ; |
|
wire [31:0] wbs_ram0_255_o ; |
wire [31:0] wbs_ram256_511_o ; |
wire [31:0] wbs_ram512_767_o ; |
wire [31:0] wbs_ram768_1023_o ; |
|
wire wbm_write = wbm_cyc_o & wbm_stb_o & wbm_we_o ; |
wire wbm_read = wbm_cyc_o & wbm_stb_o & ~wbm_we_o ; |
|
wire wbm_ram0_255_we = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b00) ; |
wire wbm_ram256_511_we = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b01) ; |
wire wbm_ram512_767_we = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b10) ; |
wire wbm_ram768_1023_we = wbm_ack_i & wbm_read & (wbm_adr_o[11:10] == 2'b11) ; |
|
wire [31:0] wbm_ram0_255_o ; |
wire [31:0] wbm_ram256_511_o ; |
wire [31:0] wbm_ram512_767_o ; |
wire [31:0] wbm_ram768_1023_o ; |
|
reg [31:0] wbm_dat_o ; |
|
always@(wbm_adr_o or wbm_ram0_255_o or wbm_ram256_511_o or wbm_ram512_767_o or wbm_ram768_1023_o) |
begin |
case (wbm_adr_o[11:10]) |
2'b00: |
begin |
wbm_dat_o = wbm_ram0_255_o ; |
end |
2'b01: |
begin |
wbm_dat_o = wbm_ram256_511_o ; |
end |
2'b10: |
begin |
wbm_dat_o = wbm_ram512_767_o ; |
end |
2'b11: |
begin |
wbm_dat_o = wbm_ram768_1023_o ; |
end |
endcase |
end |
|
reg [10:0] master_transaction_size ; |
reg [10:0] master_transaction_count ; |
reg master_opcode ; |
reg [31:0] master_base ; |
reg [31:0] master_base_next ; |
reg [10:0] target_test_size ; |
reg [31:0] target_test_start_adr ; |
reg [31:0] target_test_expect_adr ; |
reg [31:0] target_test_start_dat ; |
reg [31:0] target_test_expect_dat ; |
reg target_test_adr_error_detected, |
target_test_dat_error_detected ; |
reg [31:0] master_num_of_wb_transfers, |
master_num_of_pci_transfers ; |
reg [31:0] master_test_start_dat ; |
reg [31:0] pci_clk_master_test_expect_dat ; |
reg [20:0] master_test_size ; |
reg [20:0] pci_clk_master_test_size ; |
reg pci_clk_master_test_done, |
wb_clk_master_test_done_sync, |
wb_clk_master_test_done, |
wb_clk_master_test_start, |
pci_clk_master_test_start_sync, |
pci_clk_master_test_start, |
pci_clk_master_test_started, |
wb_clk_master_test_started_sync, |
wb_clk_master_test_started, |
master_dat_err_detected ; |
|
always@(posedge pci_clk_i or posedge rst_i) |
begin |
if (rst_i) |
begin |
pci_clk_master_test_expect_dat <= 0 ; |
pci_clk_master_test_size <= 0 ; |
pci_clk_master_test_done <= 1 ; |
pci_clk_master_test_start_sync <= 0 ; |
pci_clk_master_test_start <= 0 ; |
pci_clk_master_test_started <= 0 ; |
master_dat_err_detected <= 0 ; |
end |
else |
begin |
// sync flop always samples the data |
pci_clk_master_test_start_sync <= wb_clk_master_test_start ; |
if (pci_clk_master_test_size == 0) |
begin |
// load test start_flop only when test size is zero |
pci_clk_master_test_start <= pci_clk_master_test_start_sync ; |
pci_clk_master_test_started <= 0 ; |
pci_clk_master_test_done <= 1 ; |
if (pci_clk_master_test_start) |
begin |
pci_clk_master_test_size <= master_test_size ; |
pci_clk_master_test_expect_dat <= master_test_start_dat ; |
|
// error detected bit is cleared when new test starts |
master_dat_err_detected <= 0 ; |
end |
end |
else |
begin |
pci_clk_master_test_done <= 0 ; |
pci_clk_master_test_start <= 0 ; |
pci_clk_master_test_started <= 1 ; |
if (~(pci_irdy_reg_i | ~pci_irdy_en_reg_i | pci_trdy_reg_i)) |
begin |
pci_clk_master_test_size <= pci_clk_master_test_size - 1'b1 ; |
|
if (pci_ad_reg_i != pci_clk_master_test_expect_dat) |
master_dat_err_detected <= 1'b1 ; |
|
pci_clk_master_test_expect_dat <= {pci_clk_master_test_expect_dat[30:0], pci_clk_master_test_expect_dat[31]} ; |
end |
end |
end |
end |
|
always@(posedge clk_i or posedge rst_i) |
begin |
if (rst_i) |
begin |
wb_clk_master_test_done_sync <= 1'b1 ; |
wb_clk_master_test_done <= 1'b1 ; |
wb_clk_master_test_started_sync <= 1'b0 ; |
wb_clk_master_test_started <= 1'b0 ; |
end |
else |
begin |
wb_clk_master_test_done_sync <= pci_clk_master_test_done ; |
if (wb_clk_master_test_start) |
wb_clk_master_test_done <= 1'b0 ; |
else |
wb_clk_master_test_done <= wb_clk_master_test_done_sync ; |
|
wb_clk_master_test_started_sync <= pci_clk_master_test_started ; |
wb_clk_master_test_started <= wb_clk_master_test_started_sync ; |
end |
end |
|
assign wbm_we_o = master_opcode ; |
|
reg [10:0] master_current_transaction_size ; |
|
reg [10:0] target_burst_transaction_count ; |
reg wbs_cyc_i_previous ; |
|
reg clr_master_num_of_pci_transfers ; |
reg clr_master_num_of_pci_transfers_sync ; |
reg wb_clk_clr_master_num_of_pci_transfers ; |
|
always@(posedge pci_clk_i or posedge rst_i) |
begin |
if (rst_i) |
begin |
master_num_of_pci_transfers <= 0 ; |
end |
else if (clr_master_num_of_pci_transfers) |
begin |
master_num_of_pci_transfers <= 0 ; |
end |
else if (~(pci_irdy_reg_i | ~pci_irdy_en_reg_i | pci_trdy_reg_i)) |
begin |
master_num_of_pci_transfers <= master_num_of_pci_transfers + 1'b1 ; |
end |
|
if (rst_i) |
begin |
clr_master_num_of_pci_transfers <= 1'b1 ; |
clr_master_num_of_pci_transfers_sync <= 1'b1 ; |
end |
else |
begin |
clr_master_num_of_pci_transfers <= clr_master_num_of_pci_transfers_sync ; |
clr_master_num_of_pci_transfers_sync <= wb_clk_clr_master_num_of_pci_transfers ; |
end |
end |
|
always@(posedge clk_i or posedge rst_i) |
begin |
if (rst_i) |
begin |
master_transaction_size <= 0 ; |
master_transaction_count <= 0 ; |
master_opcode <= 0 ; |
master_base <= 0 ; |
master_base_next <= 4 ; |
target_burst_transaction_count <= 0 ; |
wbs_cyc_i_previous <= 0 ; |
target_test_size <= 0 ; |
target_test_start_adr <= 0 ; |
target_test_start_dat <= 0 ; |
target_test_adr_error_detected <= 0 ; |
target_test_dat_error_detected <= 0 ; |
target_test_expect_adr <= 0 ; |
target_test_expect_dat <= 0 ; |
master_num_of_wb_transfers <= 0 ; |
wb_clk_clr_master_num_of_pci_transfers <= 1'b1 ; |
master_test_size <= 0 ; |
master_test_start_dat <= 0 ; |
wb_clk_master_test_start <= 0 ; |
end |
else |
begin |
if (sel_master_transaction_size & wbs_write & sel_registers) |
// write new value to transaction size register |
master_transaction_size <= wbs_dat_i[10:0] ; |
|
if (sel_master_transaction_count & wbs_write & sel_registers) |
// write new value to transaction count register |
master_transaction_count <= wbs_dat_i[10:0] ; |
else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i & (master_current_transaction_size == 11'h1)) |
// decrement the transaction count when ack is received and transaction size is 1 |
master_transaction_count <= master_transaction_count - 1'b1 ; |
|
if (sel_master_opcode & wbs_write & sel_registers) |
// master opcode write |
master_opcode <= wbs_dat_i[0] ; |
|
if (sel_master_base & wbs_write & sel_registers) |
// master base address write |
master_base <= {wbs_dat_i[31:2], 2'b00} ; |
|
if (sel_target_burst_transaction_count & wbs_write & sel_registers) |
target_burst_transaction_count <= 0 ; |
else if (wbs_cyc_i & ~wbs_cyc_i_previous & wbs_cab_i) |
target_burst_transaction_count <= target_burst_transaction_count + 1 ; |
|
if (sel_target_test_size & wbs_write & sel_registers) |
target_test_size <= wbs_dat_i[10:0] ; |
else if ((target_test_size != 0) & wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers) |
begin |
target_test_size <= target_test_size - 1'b1 ; |
end |
|
if (sel_target_test_start_adr & wbs_write & sel_registers) |
target_test_start_adr <= wbs_dat_i ; |
|
if (sel_target_test_start_dat & wbs_write & sel_registers) |
target_test_start_dat <= wbs_dat_i ; |
|
if (sel_target_test_error_detected & wbs_write & sel_registers) |
begin |
target_test_adr_error_detected <= 1'b0 ; |
target_test_dat_error_detected <= 1'b0 ; |
end |
else if ((target_test_size != 0) & wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers) |
begin |
target_test_adr_error_detected <= (target_test_expect_adr != wbs_adr_i) | target_test_adr_error_detected ; |
target_test_dat_error_detected <= (target_test_expect_dat != wbs_dat_i) | target_test_dat_error_detected ; |
end |
|
if (target_test_size == 0) |
begin |
target_test_expect_adr <= target_test_start_adr ; |
target_test_expect_dat <= target_test_start_dat ; |
end |
else if (wbs_cyc_i & wbs_stb_i & wbs_we_i & wbs_ack_o & ~sel_registers) |
begin |
target_test_expect_adr <= target_test_expect_adr + 'd4 ; |
target_test_expect_dat <= {target_test_expect_dat[30:0], target_test_expect_dat[31]} ; |
end |
|
if (sel_master_num_of_wb_transfers & wbs_write & sel_registers) |
begin |
master_num_of_wb_transfers <= 0 ; |
wb_clk_clr_master_num_of_pci_transfers <= 1'b1 ; |
end |
else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i) |
begin |
wb_clk_clr_master_num_of_pci_transfers <= 1'b0 ; |
master_num_of_wb_transfers <= master_num_of_wb_transfers + 1'b1 ; |
end |
|
if (wb_clk_master_test_done & wbs_write & sel_master_test_size & sel_registers & ~wb_clk_master_test_start) |
begin |
master_test_size <= wbs_dat_i[20:0] ; |
wb_clk_master_test_start <= 1'b1 ; |
end |
else |
begin |
if (wb_clk_master_test_started & !wb_clk_master_test_done) |
wb_clk_master_test_start <= 1'b0 ; |
end |
|
if (sel_master_test_start_dat & wbs_write & sel_registers) |
master_test_start_dat <= wbs_dat_i ; |
|
master_base_next <= master_base + 4 ; |
|
wbs_cyc_i_previous <= wbs_cyc_i ; |
end |
end |
|
reg [31:0] register_output ; |
reg [31:0] ram_output ; |
|
always@ |
( |
wbs_adr_i or |
master_transaction_size or |
master_transaction_count or |
master_opcode or |
master_base or |
target_burst_transaction_count or |
target_test_size or |
target_test_start_adr or |
target_test_start_dat or |
target_test_adr_error_detected or |
target_test_dat_error_detected or |
master_num_of_wb_transfers or |
master_num_of_pci_transfers or |
master_test_size or |
master_test_start_dat or |
master_dat_err_detected |
) |
begin |
sel_master_transaction_size = 1'b0 ; |
sel_master_transaction_count = 1'b0 ; |
sel_master_opcode = 1'b0 ; |
sel_master_base = 1'b0 ; |
sel_target_burst_transaction_count = 1'b0 ; |
sel_target_test_size = 1'b0 ; |
sel_target_test_start_adr = 1'b0 ; |
sel_target_test_start_dat = 1'b0 ; |
sel_target_test_error_detected = 1'b0 ; |
sel_master_num_of_wb_transfers = 1'b0 ; |
sel_master_test_size = 1'b0 ; |
sel_master_test_start_dat = 1'b0 ; |
sel_master_dat_err_detected = 1'b0 ; |
register_output = 0 ; |
|
case (wbs_adr_i[5:2]) |
4'b0000: |
begin |
sel_master_transaction_size = 1'b1 ; |
register_output = {21'h0, master_transaction_size} ; |
end |
4'b0001: |
begin |
sel_master_transaction_count = 1'b1 ; |
register_output = {21'h0, master_transaction_count} ; |
end |
4'b0010: |
begin |
sel_master_opcode = 1'b1 ; |
register_output = {31'h0, master_opcode} ; |
end |
4'b0011: |
begin |
sel_master_base = 1'b1 ; |
register_output = master_base ; |
end |
4'b0100: |
begin |
sel_target_burst_transaction_count = 1'b1 ; |
register_output = target_burst_transaction_count ; |
end |
4'b0101: |
begin |
sel_target_test_size = 1'b1 ; |
register_output = {20'h0, target_test_size} ; |
end |
4'b0110: |
begin |
sel_target_test_start_adr = 1'b1 ; |
register_output = target_test_start_adr ; |
end |
4'b0111: |
begin |
sel_target_test_start_dat = 1'b1 ; |
register_output = target_test_start_dat ; |
end |
4'b1000: |
begin |
sel_target_test_error_detected = 1'b1 ; |
register_output = {30'h0, target_test_adr_error_detected, target_test_dat_error_detected} ; |
end |
4'b1001: |
begin |
sel_master_num_of_wb_transfers = 1'b1 ; |
register_output = master_num_of_wb_transfers ; |
end |
4'b1010: |
begin |
sel_master_num_of_pci_transfers = 1'b1 ; |
register_output = master_num_of_pci_transfers ; |
end |
4'b1011: |
begin |
sel_master_test_size = 1'b1 ; |
register_output = {11'h0, master_test_size} ; |
end |
4'b1100: |
begin |
sel_master_test_start_dat = 1'b1 ; |
register_output = master_test_start_dat ; |
end |
4'b1101: |
begin |
sel_master_dat_err_detected = 1'b1 ; |
register_output = {31'h0, master_dat_err_detected} ; |
end |
endcase |
end |
|
always@(wbs_adr_i or wbs_ram0_255_o or wbs_ram256_511_o or wbs_ram512_767_o or wbs_ram768_1023_o) |
begin |
case (wbs_adr_i[11:10]) |
2'b00:ram_output = wbs_ram0_255_o ; |
2'b01:ram_output = wbs_ram256_511_o ; |
2'b10:ram_output = wbs_ram512_767_o ; |
2'b11:ram_output = wbs_ram768_1023_o ; |
endcase |
end |
|
assign wbs_dat_o = sel_registers ? register_output : ram_output ; |
|
reg delayed_ack_for_reads ; |
|
always@(posedge clk_i or posedge rst_i) |
begin |
if (rst_i) |
delayed_ack_for_reads <= 1'b0 ; |
else if (delayed_ack_for_reads) |
delayed_ack_for_reads <= 1'b0 ; |
else |
delayed_ack_for_reads <= wbs_cyc_i & wbs_stb_i & (~wbs_we_i) ; |
end |
|
assign wbs_ack_o = wbs_we_i ? (wbs_cyc_i & wbs_stb_i) : delayed_ack_for_reads ; |
|
assign wbs_err_o = 1'b0 ; |
assign wbs_rty_o = 1'b0 ; |
|
reg wbm_cyc_o, wbm_cab_o, wbm_stb_o; |
reg [31:0] wbm_adr_o ; |
reg [31:0] wbm_next_adr_o ; |
|
wire wbm_end_cycle = wbm_cyc_o & wbm_stb_o & wbm_ack_i & (master_current_transaction_size == 11'h1) ; |
wire wbm_start_cycle = (master_transaction_size != 11'h0) & (master_transaction_count != 11'h0) & ~wbm_cyc_o ; |
|
always@(posedge clk_i or posedge rst_i) |
begin |
if (rst_i) |
begin |
wbm_cyc_o <= 1'b0 ; |
wbm_cab_o <= 1'b0 ; |
wbm_stb_o <= 1'b0 ; |
wbm_adr_o <= 32'h0 ; |
master_current_transaction_size <= 11'h0 ; |
wbm_next_adr_o <= 32'h4 ; |
end |
else |
begin |
if (master_transaction_count == 11'h0) |
begin |
wbm_adr_o <= master_base ; |
wbm_next_adr_o <= master_base_next ; |
end |
else if (wbm_cyc_o & wbm_stb_o & wbm_ack_i) |
begin |
wbm_adr_o <= wbm_next_adr_o ; |
wbm_next_adr_o[31:2] <= wbm_next_adr_o[31:2] + 1'b1 ; |
end |
|
if (wbm_start_cycle) |
begin |
wbm_cyc_o <= 1'b1 ; |
wbm_cab_o <= (master_transaction_size != 11'h1) ; |
wbm_stb_o <= 1'b1 ; |
master_current_transaction_size <= master_transaction_size ; |
end |
else if (wbm_cyc_o) |
begin |
if (wbm_end_cycle) |
begin |
wbm_cyc_o <= 1'b0 ; |
wbm_stb_o <= 1'b0 ; |
wbm_cab_o <= 1'b0 ; |
end |
else |
begin |
if (wbm_stb_o & wbm_ack_i) |
begin |
master_current_transaction_size <= master_current_transaction_size - 1'b1 ; |
end |
end |
end |
end |
end |
|
wire [7:0] master_ram_adr = (wbm_we_o & wbm_ack_i) ? wbm_next_adr_o[9:2] : wbm_adr_o[9:2] ; |
|
RAMB4_S16_S16 ramb4_s16_s16_00 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[31:16]), |
.ENA(1'b1), |
.WEA(wbs_ram0_255_we), |
.DOA(wbs_ram0_255_o[31:16]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[31:16]), |
.ENB(1'b1), |
.WEB(wbm_ram0_255_we), |
.DOB(wbm_ram0_255_o[31:16]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_01 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[15:0]), |
.ENA(1'b1), |
.WEA(wbs_ram0_255_we), |
.DOA(wbs_ram0_255_o[15:0]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[15:0]), |
.ENB(1'b1), |
.WEB(wbm_ram0_255_we), |
.DOB(wbm_ram0_255_o[15:0]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_10 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[31:16]), |
.ENA(1'b1), |
.WEA(wbs_ram256_511_we), |
.DOA(wbs_ram256_511_o[31:16]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[31:16]), |
.ENB(1'b1), |
.WEB(wbm_ram256_511_we), |
.DOB(wbm_ram256_511_o[31:16]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_11 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[15:0]), |
.ENA(1'b1), |
.WEA(wbs_ram256_511_we), |
.DOA(wbs_ram256_511_o[15:0]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[15:0]), |
.ENB(1'b1), |
.WEB(wbm_ram256_511_we), |
.DOB(wbm_ram256_511_o[15:0]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_20 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[31:16]), |
.ENA(1'b1), |
.WEA(wbs_ram512_767_we), |
.DOA(wbs_ram512_767_o[31:16]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[31:16]), |
.ENB(1'b1), |
.WEB(wbm_ram512_767_we), |
.DOB(wbm_ram512_767_o[31:16]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_21 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[15:0]), |
.ENA(1'b1), |
.WEA(wbs_ram512_767_we), |
.DOA(wbs_ram512_767_o[15:0]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[15:0]), |
.ENB(1'b1), |
.WEB(wbm_ram512_767_we), |
.DOB(wbm_ram512_767_o[15:0]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_30 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[31:16]), |
.ENA(1'b1), |
.WEA(wbs_ram768_1023_we), |
.DOA(wbs_ram768_1023_o[31:16]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[31:16]), |
.ENB(1'b1), |
.WEB(wbm_ram768_1023_we), |
.DOB(wbm_ram768_1023_o[31:16]) |
); |
|
RAMB4_S16_S16 ramb4_s16_s16_31 |
( |
.CLKA(clk_i), |
.RSTA(rst_i), |
.ADDRA(wbs_adr_i[9:2]), |
.DIA(wbs_dat_i[15:0]), |
.ENA(1'b1), |
.WEA(wbs_ram768_1023_we), |
.DOA(wbs_ram768_1023_o[15:0]), |
|
.CLKB(clk_i), |
.RSTB(rst_i), |
.ADDRB(master_ram_adr), |
.DIB(wbm_dat_i[15:0]), |
.ENB(1'b1), |
.WEB(wbm_ram768_1023_we), |
.DOB(wbm_ram768_1023_o[15:0]) |
); |
|
endmodule // test |
/verilog/pci_test_top_2clks.v
0,0 → 1,515
module pci_test_top |
( |
pci_clk_pad_i, |
pci_rst_pad_i, |
clk_pad_i, |
|
pci_req_pad_o, |
pci_gnt_pad_i, |
pci_idsel_pad_i, |
|
pci_ad0_pad_io, |
pci_ad1_pad_io, |
pci_ad2_pad_io, |
pci_ad3_pad_io, |
pci_ad4_pad_io, |
pci_ad5_pad_io, |
pci_ad6_pad_io, |
pci_ad7_pad_io, |
pci_ad8_pad_io, |
pci_ad9_pad_io, |
pci_ad10_pad_io, |
pci_ad11_pad_io, |
pci_ad12_pad_io, |
pci_ad13_pad_io, |
pci_ad14_pad_io, |
pci_ad15_pad_io, |
pci_ad16_pad_io, |
pci_ad17_pad_io, |
pci_ad18_pad_io, |
pci_ad19_pad_io, |
pci_ad20_pad_io, |
pci_ad21_pad_io, |
pci_ad22_pad_io, |
pci_ad23_pad_io, |
pci_ad24_pad_io, |
pci_ad25_pad_io, |
pci_ad26_pad_io, |
pci_ad27_pad_io, |
pci_ad28_pad_io, |
pci_ad29_pad_io, |
pci_ad30_pad_io, |
pci_ad31_pad_io, |
|
pci_cbe0_pad_io, |
pci_cbe1_pad_io, |
pci_cbe2_pad_io, |
pci_cbe3_pad_io, |
|
pci_frame_pad_io, |
pci_irdy_pad_io, |
pci_devsel_pad_io, |
pci_trdy_pad_io, |
pci_stop_pad_io, |
pci_par_pad_io, |
pci_perr_pad_io, |
pci_serr_pad_o |
); |
|
// input/output inout declarations |
input pci_clk_pad_i, |
pci_rst_pad_i, |
clk_pad_i ; |
|
output pci_req_pad_o, pci_serr_pad_o ; |
input pci_gnt_pad_i, |
pci_idsel_pad_i ; |
|
inout pci_frame_pad_io, |
pci_irdy_pad_io, |
pci_devsel_pad_io, |
pci_trdy_pad_io, |
pci_stop_pad_io, |
pci_par_pad_io, |
pci_perr_pad_io, |
pci_ad0_pad_io, |
pci_ad1_pad_io, |
pci_ad2_pad_io, |
pci_ad3_pad_io, |
pci_ad4_pad_io, |
pci_ad5_pad_io, |
pci_ad6_pad_io, |
pci_ad7_pad_io, |
pci_ad8_pad_io, |
pci_ad9_pad_io, |
pci_ad10_pad_io, |
pci_ad11_pad_io, |
pci_ad12_pad_io, |
pci_ad13_pad_io, |
pci_ad14_pad_io, |
pci_ad15_pad_io, |
pci_ad16_pad_io, |
pci_ad17_pad_io, |
pci_ad18_pad_io, |
pci_ad19_pad_io, |
pci_ad20_pad_io, |
pci_ad21_pad_io, |
pci_ad22_pad_io, |
pci_ad23_pad_io, |
pci_ad24_pad_io, |
pci_ad25_pad_io, |
pci_ad26_pad_io, |
pci_ad27_pad_io, |
pci_ad28_pad_io, |
pci_ad29_pad_io, |
pci_ad30_pad_io, |
pci_ad31_pad_io, |
pci_cbe0_pad_io, |
pci_cbe1_pad_io, |
pci_cbe2_pad_io, |
pci_cbe3_pad_io ; |
|
// wires for test master to pci slave connections |
wire wbm_test_wbs_pci_cyc, |
wbm_test_wbs_pci_stb, |
wbm_test_wbs_pci_cab, |
wbm_test_wbs_pci_we, |
wbs_pci_wbm_test_ack ; |
|
wire [31:0] wbm_test_wbs_pci_adr, |
wbm_test_wbs_pci_dat, |
wbs_pci_wbm_test_dat ; |
|
wire [3:0] wbm_test_wbs_pci_sel ; |
|
// wires for test slave to pci master connections |
wire wbm_pci_wbs_test_cyc, |
wbm_pci_wbs_test_stb, |
wbm_pci_wbs_test_cab, |
wbm_pci_wbs_test_we, |
wbs_test_wbm_pci_ack ; |
|
wire [31:0] wbm_pci_wbs_test_adr, |
wbm_pci_wbs_test_dat, |
wbs_test_wbm_pci_dat ; |
|
wire [3:0] wbm_pci_wbs_test_sel ; |
|
wire wb_rst ; |
|
wire wb_clk ; |
wire wb_clk_unbuf ; |
|
wire clk0 ; |
wire clk0_buf ; |
wire clk_i_buf ; |
|
CLKDLL i_clkdll |
( |
.CLKIN ( clk_i_buf ), |
.CLKFB ( clk0_buf ), |
.RST ( 1'b0 ), |
.CLK2X ( ), |
.CLK0 ( clk0 ), |
.CLK90 ( ), |
.CLK180 ( ), |
.CLK270 ( ), |
.CLKDV ( wb_clk_unbuf ), |
.LOCKED ( ) |
); |
|
BUFG i_bufg_clk0 |
( |
.I( clk0 ), |
.O( clk0_buf ) |
) ; |
|
BUFG i_bufg_wb_clk |
( |
.I( wb_clk_unbuf ), |
.O( wb_clk ) |
) ; |
|
IBUFG i_ibufg_clk_pad_i |
( |
.I( clk_pad_i ), |
.O( clk_i_buf ) |
) ; |
|
// prevent concurent accesses through pci bridge master and slave interfaces |
reg test_wbs_cyc ; |
reg pci_wbs_cyc ; |
|
always@(posedge wb_clk or posedge wb_rst) |
begin |
if (wb_rst) |
begin |
test_wbs_cyc <= 1'b0 ; |
pci_wbs_cyc <= 1'b0 ; |
end |
else |
begin |
if (~pci_wbs_cyc & ~test_wbs_cyc) |
begin |
// currently no cyc signal is asserted - the pci bridge wb master will have the priority here, so check if it has cycle asserted! |
if (wbm_pci_wbs_test_cyc) |
test_wbs_cyc <= 1'b1 ; |
else // no cycle is asserted and pci wb master is not starting the transaction - test wb master can start |
pci_wbs_cyc <= wbm_test_wbs_pci_cyc ; |
end |
else |
begin |
// at least one of the cycles is asserted - wait for transaction to finish |
if (test_wbs_cyc) |
test_wbs_cyc <= wbm_pci_wbs_test_cyc ; |
|
if (pci_wbs_cyc) |
pci_wbs_cyc <= wbm_test_wbs_pci_cyc ; |
end |
end |
end |
|
wire pci_irdy_out, |
pci_irdy_en, |
pci_trdy_reg ; |
|
reg pci_irdy_reg ; |
reg pci_irdy_en_reg ; |
reg [31:0] pci_ad_reg ; |
wire [31:0] pci_ad_bckp ; |
|
always@(posedge pci_clk_pad_i or negedge pci_rst_pad_i) |
begin |
if (~pci_rst_pad_i) |
begin |
pci_irdy_reg <= 1'b1 ; |
pci_irdy_en_reg <= 1'b0 ; |
pci_ad_reg <= 0 ; |
end |
else |
begin |
pci_irdy_reg <= pci_irdy_out ; |
pci_irdy_en_reg <= pci_irdy_en ; |
pci_ad_reg <= pci_ad_bckp ; |
end |
end |
|
test i_test |
( |
.pci_clk_i (pci_clk_pad_i), |
.clk_i (wb_clk), |
.rst_i (wb_rst), |
|
.wbm_cyc_o (wbm_test_wbs_pci_cyc), |
.wbm_stb_o (wbm_test_wbs_pci_stb), |
.wbm_cab_o (wbm_test_wbs_pci_cab), |
.wbm_we_o (wbm_test_wbs_pci_we), |
.wbm_adr_o (wbm_test_wbs_pci_adr), |
.wbm_sel_o (wbm_test_wbs_pci_sel), |
.wbm_dat_o (wbm_test_wbs_pci_dat), |
.wbm_dat_i (wbs_pci_wbm_test_dat), |
.wbm_ack_i (wbs_pci_wbm_test_ack), |
.wbm_rty_i (1'b0), |
.wbm_err_i (1'b0), |
|
.wbs_cyc_i (test_wbs_cyc), |
.wbs_stb_i (wbm_pci_wbs_test_stb), |
.wbs_cab_i (wbm_pci_wbs_test_cab), |
.wbs_we_i (wbm_pci_wbs_test_we), |
.wbs_adr_i (wbm_pci_wbs_test_adr), |
.wbs_sel_i (wbm_pci_wbs_test_sel), |
.wbs_dat_i (wbm_pci_wbs_test_dat), |
.wbs_dat_o (wbs_test_wbm_pci_dat), |
.wbs_ack_o (wbs_test_wbm_pci_ack), |
.wbs_rty_o (), |
.wbs_err_o (), |
|
.pci_irdy_reg_i (pci_irdy_reg), |
.pci_irdy_en_reg_i (pci_irdy_en_reg), |
.pci_trdy_reg_i (pci_trdy_reg), |
.pci_ad_reg_i (pci_ad_reg) |
); |
|
wire pci_req_o, |
pci_req_oe, |
pci_frame_i, |
pci_frame_o, |
pci_frame_oe, |
pci_irdy_oe, |
pci_devsel_oe, |
pci_trdy_oe, |
pci_stop_oe, |
pci_irdy_i, |
pci_irdy_o, |
pci_devsel_i, |
pci_devsel_o, |
pci_trdy_i, |
pci_trdy_o, |
pci_stop_i, |
pci_stop_o, |
pci_par_i, |
pci_par_o, |
pci_par_oe, |
pci_perr_i, |
pci_perr_o, |
pci_perr_oe, |
pci_serr_o, |
pci_serr_oe |
; |
|
wire [31:0] pci_ad_oe, |
pci_ad_i, |
pci_ad_o ; |
|
wire [3:0] pci_cbe_oe, |
pci_cbe_i, |
pci_cbe_o ; |
|
bufif0 ad_buffer00 (pci_ad0_pad_io , pci_ad_o[0] , pci_ad_oe[0] ) ; |
bufif0 ad_buffer01 (pci_ad1_pad_io , pci_ad_o[1] , pci_ad_oe[1] ) ; |
bufif0 ad_buffer02 (pci_ad2_pad_io , pci_ad_o[2] , pci_ad_oe[2] ) ; |
bufif0 ad_buffer03 (pci_ad3_pad_io , pci_ad_o[3] , pci_ad_oe[3] ) ; |
bufif0 ad_buffer04 (pci_ad4_pad_io , pci_ad_o[4] , pci_ad_oe[4] ) ; |
bufif0 ad_buffer05 (pci_ad5_pad_io , pci_ad_o[5] , pci_ad_oe[5] ) ; |
bufif0 ad_buffer06 (pci_ad6_pad_io , pci_ad_o[6] , pci_ad_oe[6] ) ; |
bufif0 ad_buffer07 (pci_ad7_pad_io , pci_ad_o[7] , pci_ad_oe[7] ) ; |
bufif0 ad_buffer08 (pci_ad8_pad_io , pci_ad_o[8] , pci_ad_oe[8] ) ; |
bufif0 ad_buffer09 (pci_ad9_pad_io , pci_ad_o[9] , pci_ad_oe[9] ) ; |
bufif0 ad_buffer10 (pci_ad10_pad_io, pci_ad_o[10], pci_ad_oe[10]) ; |
bufif0 ad_buffer11 (pci_ad11_pad_io, pci_ad_o[11], pci_ad_oe[11]) ; |
bufif0 ad_buffer12 (pci_ad12_pad_io, pci_ad_o[12], pci_ad_oe[12]) ; |
bufif0 ad_buffer13 (pci_ad13_pad_io, pci_ad_o[13], pci_ad_oe[13]) ; |
bufif0 ad_buffer14 (pci_ad14_pad_io, pci_ad_o[14], pci_ad_oe[14]) ; |
bufif0 ad_buffer15 (pci_ad15_pad_io, pci_ad_o[15], pci_ad_oe[15]) ; |
bufif0 ad_buffer16 (pci_ad16_pad_io, pci_ad_o[16], pci_ad_oe[16]) ; |
bufif0 ad_buffer17 (pci_ad17_pad_io, pci_ad_o[17], pci_ad_oe[17]) ; |
bufif0 ad_buffer18 (pci_ad18_pad_io, pci_ad_o[18], pci_ad_oe[18]) ; |
bufif0 ad_buffer19 (pci_ad19_pad_io, pci_ad_o[19], pci_ad_oe[19]) ; |
bufif0 ad_buffer20 (pci_ad20_pad_io, pci_ad_o[20], pci_ad_oe[20]) ; |
bufif0 ad_buffer21 (pci_ad21_pad_io, pci_ad_o[21], pci_ad_oe[21]) ; |
bufif0 ad_buffer22 (pci_ad22_pad_io, pci_ad_o[22], pci_ad_oe[22]) ; |
bufif0 ad_buffer23 (pci_ad23_pad_io, pci_ad_o[23], pci_ad_oe[23]) ; |
bufif0 ad_buffer24 (pci_ad24_pad_io, pci_ad_o[24], pci_ad_oe[24]) ; |
bufif0 ad_buffer25 (pci_ad25_pad_io, pci_ad_o[25], pci_ad_oe[25]) ; |
bufif0 ad_buffer26 (pci_ad26_pad_io, pci_ad_o[26], pci_ad_oe[26]) ; |
bufif0 ad_buffer27 (pci_ad27_pad_io, pci_ad_o[27], pci_ad_oe[27]) ; |
bufif0 ad_buffer28 (pci_ad28_pad_io, pci_ad_o[28], pci_ad_oe[28]) ; |
bufif0 ad_buffer29 (pci_ad29_pad_io, pci_ad_o[29], pci_ad_oe[29]) ; |
bufif0 ad_buffer30 (pci_ad30_pad_io, pci_ad_o[30], pci_ad_oe[30]) ; |
bufif0 ad_buffer31 (pci_ad31_pad_io, pci_ad_o[31], pci_ad_oe[31]) ; |
|
bufif0 cbe_buffer0 (pci_cbe0_pad_io, pci_cbe_o[0], pci_cbe_oe[0]) ; |
bufif0 cbe_buffer1 (pci_cbe1_pad_io, pci_cbe_o[1], pci_cbe_oe[1]) ; |
bufif0 cbe_buffer2 (pci_cbe2_pad_io, pci_cbe_o[2], pci_cbe_oe[2]) ; |
bufif0 cbe_buffer3 (pci_cbe3_pad_io, pci_cbe_o[3], pci_cbe_oe[3]) ; |
|
assign pci_ad_i = { |
pci_ad31_pad_io, |
pci_ad30_pad_io, |
pci_ad29_pad_io, |
pci_ad28_pad_io, |
pci_ad27_pad_io, |
pci_ad26_pad_io, |
pci_ad25_pad_io, |
pci_ad24_pad_io, |
pci_ad23_pad_io, |
pci_ad22_pad_io, |
pci_ad21_pad_io, |
pci_ad20_pad_io, |
pci_ad19_pad_io, |
pci_ad18_pad_io, |
pci_ad17_pad_io, |
pci_ad16_pad_io, |
pci_ad15_pad_io, |
pci_ad14_pad_io, |
pci_ad13_pad_io, |
pci_ad12_pad_io, |
pci_ad11_pad_io, |
pci_ad10_pad_io, |
pci_ad9_pad_io, |
pci_ad8_pad_io, |
pci_ad7_pad_io, |
pci_ad6_pad_io, |
pci_ad5_pad_io, |
pci_ad4_pad_io, |
pci_ad3_pad_io, |
pci_ad2_pad_io, |
pci_ad1_pad_io, |
pci_ad0_pad_io |
} ; |
|
assign pci_cbe_i = { |
pci_cbe3_pad_io, |
pci_cbe2_pad_io, |
pci_cbe1_pad_io, |
pci_cbe0_pad_io |
} ; |
|
bufif0 req_buf (pci_req_pad_o, pci_req_o, pci_req_oe) ; |
|
bufif0 frame_buf (pci_frame_pad_io, pci_frame_o, pci_frame_oe) ; |
assign pci_frame_i = pci_frame_pad_io ; |
|
bufif0 irdy_buf (pci_irdy_pad_io, pci_irdy_o, pci_irdy_oe) ; |
assign pci_irdy_i = pci_irdy_pad_io ; |
|
bufif0 devsel_buf (pci_devsel_pad_io, pci_devsel_o, pci_devsel_oe) ; |
assign pci_devsel_i = pci_devsel_pad_io ; |
|
bufif0 trdy_buf (pci_trdy_pad_io, pci_trdy_o, pci_trdy_oe) ; |
assign pci_trdy_i = pci_trdy_pad_io ; |
|
bufif0 stop_buf (pci_stop_pad_io, pci_stop_o, pci_stop_oe) ; |
assign pci_stop_i = pci_stop_pad_io ; |
|
bufif0 par_buf (pci_par_pad_io, pci_par_o, pci_par_oe) ; |
assign pci_par_i = pci_par_pad_io ; |
|
bufif0 perr_buf (pci_perr_pad_io, pci_perr_o, pci_perr_oe) ; |
assign pci_perr_i = pci_perr_pad_io ; |
|
bufif0 serr_buf (pci_serr_pad_o, pci_serr_o, pci_serr_oe) ; |
|
pci_bridge32 i_pci_bridge32 |
( |
// WISHBONE system signals |
.wb_clk_i(wb_clk), |
.wb_rst_i(1'b0), |
.wb_rst_o(wb_rst), |
.wb_int_i(1'b0), |
.wb_int_o(), |
|
// WISHBONE slave interface |
.wbs_adr_i(wbm_test_wbs_pci_adr), |
.wbs_dat_i(wbm_test_wbs_pci_dat), |
.wbs_dat_o(wbs_pci_wbm_test_dat), |
.wbs_sel_i(wbm_test_wbs_pci_sel), |
.wbs_cyc_i(pci_wbs_cyc), |
.wbs_stb_i(wbm_test_wbs_pci_stb), |
.wbs_we_i (wbm_test_wbs_pci_we), |
.wbs_cab_i(wbm_test_wbs_pci_cab), |
.wbs_ack_o(wbs_pci_wbm_test_ack), |
.wbs_rty_o(), |
.wbs_err_o(), |
|
// WISHBONE master interface |
.wbm_adr_o(wbm_pci_wbs_test_adr), |
.wbm_dat_i(wbs_test_wbm_pci_dat), |
.wbm_dat_o(wbm_pci_wbs_test_dat), |
.wbm_sel_o(wbm_pci_wbs_test_sel), |
.wbm_cyc_o(wbm_pci_wbs_test_cyc), |
.wbm_stb_o(wbm_pci_wbs_test_stb), |
.wbm_we_o (wbm_pci_wbs_test_we), |
.wbm_cab_o(wbm_pci_wbs_test_cab), |
.wbm_ack_i(wbs_test_wbm_pci_ack), |
.wbm_rty_i(1'b0), |
.wbm_err_i(1'b0), |
|
// pci interface - system pins |
.pci_clk_i (pci_clk_pad_i), |
.pci_rst_i (pci_rst_pad_i), |
.pci_rst_o (), |
.pci_inta_i (1'b1), |
.pci_inta_o (), |
.pci_rst_oe_o (), |
.pci_inta_oe_o (), |
|
// arbitration pins |
.pci_req_o (pci_req_o), |
.pci_req_oe_o (pci_req_oe), |
|
.pci_gnt_i (pci_gnt_pad_i), |
|
// protocol pins |
.pci_frame_i (pci_frame_i), |
.pci_frame_o (pci_frame_o), |
|
.pci_frame_oe_o (pci_frame_oe), |
.pci_irdy_oe_o (pci_irdy_oe), |
.pci_devsel_oe_o(pci_devsel_oe), |
.pci_trdy_oe_o (pci_trdy_oe), |
.pci_stop_oe_o (pci_stop_oe), |
.pci_ad_oe_o (pci_ad_oe), |
.pci_cbe_oe_o (pci_cbe_oe), |
|
.pci_irdy_i (pci_irdy_i), |
.pci_irdy_o (pci_irdy_o), |
|
.pci_idsel_i (pci_idsel_pad_i), |
|
.pci_devsel_i (pci_devsel_i), |
.pci_devsel_o (pci_devsel_o), |
|
.pci_trdy_i (pci_trdy_i), |
.pci_trdy_o (pci_trdy_o), |
|
.pci_stop_i (pci_stop_i), |
.pci_stop_o (pci_stop_o), |
|
// data transfer pins |
.pci_ad_i (pci_ad_i), |
.pci_ad_o (pci_ad_o), |
|
.pci_cbe_i (pci_cbe_i), |
.pci_cbe_o (pci_cbe_o), |
|
// parity generation and checking pins |
.pci_par_i (pci_par_i), |
.pci_par_o (pci_par_o), |
.pci_par_oe_o (pci_par_oe), |
|
.pci_perr_i (pci_perr_i), |
.pci_perr_o (pci_perr_o), |
.pci_perr_oe_o (pci_perr_oe), |
|
// system error pin |
.pci_serr_o (pci_serr_o), |
.pci_serr_oe_o (pci_serr_oe), |
|
// debug |
.trdy_reg_o (pci_trdy_reg), |
.irdy_o (pci_irdy_out), |
.irdy_en_o (pci_irdy_en), |
.pci_ad_bckp_o (pci_ad_bckp) |
); |
endmodule // pci_test_top |
/verilog/pci_bridge32.v
0,0 → 1,1452
////////////////////////////////////////////////////////////////////// |
//// //// |
//// File name "pci_bridge32.v" //// |
//// //// |
//// This file is part of the "PCI bridge" project //// |
//// http://www.opencores.org/cores/pci/ //// |
//// //// |
//// Author(s): //// |
//// - Miha Dolenc (mihad@opencores.org) //// |
//// - Tadej Markovic (tadej@opencores.org) //// |
//// //// |
//// All additional information is avaliable in the README //// |
//// file. //// |
//// //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2001 Miha Dolenc, mihad@opencores.org //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// |
// CVS Revision History |
// |
// $Log: not supported by cvs2svn $ |
// Revision 1.9 2003/01/27 16:49:31 mihad |
// Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed. |
// |
// Revision 1.8 2002/10/21 13:04:33 mihad |
// Changed BIST signal names etc.. |
// |
// Revision 1.7 2002/10/18 03:36:37 tadejm |
// Changed wrong signal name scanb_sen into scanb_en. |
// |
// Revision 1.6 2002/10/17 22:51:50 tadejm |
// Changed BIST signals for RAMs. |
// |
// Revision 1.5 2002/10/11 10:09:01 mihad |
// Added additional testcase and changed rst name in BIST to trst |
// |
// Revision 1.4 2002/10/08 17:17:05 mihad |
// Added BIST signals for RAMs. |
// |
// Revision 1.3 2002/02/01 15:25:12 mihad |
// Repaired a few bugs, updated specification, added test bench files and design document |
// |
// Revision 1.2 2001/10/05 08:14:28 mihad |
// Updated all files with inclusion of timescale file for simulation purposes. |
// |
// Revision 1.1.1.1 2001/10/02 15:33:46 mihad |
// New project directory structure |
// |
// |
|
`include "pci_constants.v" |
|
// synopsys translate_off |
`include "timescale.v" |
// synopsys translate_on |
|
// this is top level module of pci bridge core |
// it instantiates and connects other lower level modules |
// check polarity of PCI output enables in file out_reg.v and change it according to IO interface specification |
|
module pci_bridge32 |
( |
// WISHBONE system signals |
wb_clk_i, |
wb_rst_i, |
wb_rst_o, |
wb_int_i, |
wb_int_o, |
|
// WISHBONE slave interface |
wbs_adr_i, |
wbs_dat_i, |
wbs_dat_o, |
wbs_sel_i, |
wbs_cyc_i, |
wbs_stb_i, |
wbs_we_i, |
wbs_cab_i, |
wbs_ack_o, |
wbs_rty_o, |
wbs_err_o, |
|
// WISHBONE master interface |
wbm_adr_o, |
wbm_dat_i, |
wbm_dat_o, |
wbm_sel_o, |
wbm_cyc_o, |
wbm_stb_o, |
wbm_we_o, |
wbm_cab_o, |
wbm_ack_i, |
wbm_rty_i, |
wbm_err_i, |
|
// pci interface - system pins |
pci_clk_i, |
pci_rst_i, |
pci_rst_o, |
pci_inta_i, |
pci_inta_o, |
pci_rst_oe_o, |
pci_inta_oe_o, |
|
// arbitration pins |
pci_req_o, |
pci_req_oe_o, |
|
pci_gnt_i, |
|
// protocol pins |
pci_frame_i, |
pci_frame_o, |
|
pci_frame_oe_o, |
pci_irdy_oe_o, |
pci_devsel_oe_o, |
pci_trdy_oe_o, |
pci_stop_oe_o, |
pci_ad_oe_o, |
pci_cbe_oe_o, |
|
pci_irdy_i, |
pci_irdy_o, |
|
pci_idsel_i, |
|
pci_devsel_i, |
pci_devsel_o, |
|
pci_trdy_i, |
pci_trdy_o, |
|
pci_stop_i, |
pci_stop_o , |
|
// data transfer pins |
pci_ad_i, |
pci_ad_o, |
|
pci_cbe_i, |
pci_cbe_o, |
|
// parity generation and checking pins |
pci_par_i, |
pci_par_o, |
pci_par_oe_o, |
|
pci_perr_i, |
pci_perr_o, |
pci_perr_oe_o, |
|
// system error pin |
pci_serr_o, |
pci_serr_oe_o, |
|
// debug |
trdy_reg_o, |
irdy_o, |
irdy_en_o, |
pci_ad_bckp_o |
|
`ifdef PCI_BIST |
, |
// debug chain signals |
scanb_rst, // bist scan reset |
scanb_clk, // bist scan clock |
scanb_si, // bist scan serial in |
scanb_so, // bist scan serial out |
scanb_en // bist scan shift enable |
`endif |
); |
|
// WISHBONE system signals |
input wb_clk_i ; |
input wb_rst_i ; |
output wb_rst_o ; |
input wb_int_i ; |
output wb_int_o ; |
|
// WISHBONE slave interface |
input [31:0] wbs_adr_i ; |
input [31:0] wbs_dat_i ; |
output [31:0] wbs_dat_o ; |
input [3:0] wbs_sel_i ; |
input wbs_cyc_i ; |
input wbs_stb_i ; |
input wbs_we_i ; |
input wbs_cab_i ; |
output wbs_ack_o ; |
output wbs_rty_o ; |
output wbs_err_o ; |
|
// WISHBONE master interface |
output [31:0] wbm_adr_o ; |
input [31:0] wbm_dat_i ; |
output [31:0] wbm_dat_o ; |
output [3:0] wbm_sel_o ; |
output wbm_cyc_o ; |
output wbm_stb_o ; |
output wbm_we_o ; |
output wbm_cab_o ; |
input wbm_ack_i ; |
input wbm_rty_i ; |
input wbm_err_i ; |
|
// pci interface - system pins |
input pci_clk_i ; |
input pci_rst_i ; |
output pci_rst_o ; |
output pci_rst_oe_o ; |
|
input pci_inta_i ; |
output pci_inta_o ; |
output pci_inta_oe_o ; |
|
// arbitration pins |
output pci_req_o ; |
output pci_req_oe_o ; |
|
input pci_gnt_i ; |
|
// protocol pins |
input pci_frame_i ; |
output pci_frame_o ; |
output pci_frame_oe_o ; |
output pci_irdy_oe_o ; |
output pci_devsel_oe_o ; |
output pci_trdy_oe_o ; |
output pci_stop_oe_o ; |
output [31:0] pci_ad_oe_o ; |
output [3:0] pci_cbe_oe_o ; |
|
input pci_irdy_i ; |
output pci_irdy_o ; |
|
input pci_idsel_i ; |
|
input pci_devsel_i ; |
output pci_devsel_o ; |
|
input pci_trdy_i ; |
output pci_trdy_o ; |
|
input pci_stop_i ; |
output pci_stop_o ; |
|
// data transfer pins |
input [31:0] pci_ad_i ; |
output [31:0] pci_ad_o ; |
|
input [3:0] pci_cbe_i ; |
output [3:0] pci_cbe_o ; |
|
// parity generation and checking pins |
input pci_par_i ; |
output pci_par_o ; |
output pci_par_oe_o ; |
|
input pci_perr_i ; |
output pci_perr_o ; |
output pci_perr_oe_o ; |
|
// system error pin |
output pci_serr_o ; |
output pci_serr_oe_o ; |
|
// debug |
output trdy_reg_o, |
irdy_o, |
irdy_en_o ; |
|
output [31:0] pci_ad_bckp_o ; |
|
`ifdef PCI_BIST |
/*----------------------------------------------------- |
BIST debug chain port signals |
-----------------------------------------------------*/ |
input scanb_rst; // bist scan reset |
input scanb_clk; // bist scan clock |
input scanb_si; // bist scan serial in |
output scanb_so; // bist scan serial out |
input scanb_en; // bist scan shift enable |
|
// internal wires for serial chain connection |
wire SO_internal ; |
wire SI_internal = SO_internal ; |
`endif |
|
// declare clock and reset wires |
wire pci_clk = pci_clk_i ; |
wire wb_clk = wb_clk_i ; |
wire reset ; // assigned at pci bridge reset and interrupt logic |
|
/*========================================================================================================= |
First comes definition of all modules' outputs, so they can be assigned to any other module's input later |
in the file, when module is instantiated |
=========================================================================================================*/ |
// PCI BRIDGE RESET AND INTERRUPT LOGIC OUTPUTS |
wire pci_reso_reset ; |
wire pci_reso_pci_rstn_out ; |
wire pci_reso_pci_rstn_en_out ; |
wire pci_reso_rst_o ; |
wire pci_into_pci_intan_out ; |
wire pci_into_pci_intan_en_out ; |
wire pci_into_int_o ; |
wire pci_into_conf_isr_int_prop_out ; |
|
// assign pci bridge reset interrupt logic outputs to top outputs where possible |
assign reset = pci_reso_reset ; |
assign pci_rst_o = pci_reso_pci_rstn_out ; |
assign pci_rst_oe_o = pci_reso_pci_rstn_en_out ; |
assign wb_rst_o = pci_reso_rst_o ; |
assign pci_inta_o = pci_into_pci_intan_out ; |
assign pci_inta_oe_o = pci_into_pci_intan_en_out ; |
assign wb_int_o = pci_into_int_o ; |
|
// WISHBONE SLAVE UNIT OUTPUTS |
wire [31:0] wbu_sdata_out ; |
wire wbu_ack_out ; |
wire wbu_rty_out ; |
wire wbu_err_out ; |
wire wbu_pciif_req_out ; |
wire wbu_pciif_frame_out ; |
wire wbu_pciif_frame_en_out ; |
wire wbu_pciif_irdy_out ; |
wire wbu_pciif_irdy_en_out ; |
wire [31:0] wbu_pciif_ad_out ; |
wire wbu_pciif_ad_en_out ; |
wire [3:0] wbu_pciif_cbe_out ; |
wire wbu_pciif_cbe_en_out ; |
wire [31:0] wbu_err_addr_out ; |
wire [3:0] wbu_err_bc_out ; |
wire wbu_err_signal_out ; |
wire wbu_err_source_out ; |
wire wbu_err_rty_exp_out ; |
wire wbu_tabort_rec_out ; |
wire wbu_mabort_rec_out ; |
wire [11:0] wbu_conf_offset_out ; |
wire wbu_conf_renable_out ; |
wire wbu_conf_wenable_out ; |
wire [3:0] wbu_conf_be_out ; |
wire [31:0] wbu_conf_data_out ; |
wire wbu_del_read_comp_pending_out ; |
wire wbu_wbw_fifo_empty_out ; |
wire wbu_ad_load_out ; |
wire wbu_ad_load_on_transfer_out ; |
wire wbu_pciif_frame_load_out ; |
|
// assign wishbone slave unit's outputs to top outputs where possible |
assign wbs_dat_o = wbu_sdata_out ; |
assign wbs_ack_o = wbu_ack_out ; |
assign wbs_rty_o = wbu_rty_out ; |
assign wbs_err_o = wbu_err_out ; |
|
// PCI TARGET UNIT OUTPUTS |
wire [31:0] pciu_adr_out ; |
wire [31:0] pciu_mdata_out ; |
wire pciu_cyc_out ; |
wire pciu_stb_out ; |
wire pciu_we_out ; |
wire [3:0] pciu_sel_out ; |
wire pciu_cab_out ; |
wire pciu_pciif_trdy_out ; |
wire pciu_pciif_stop_out ; |
wire pciu_pciif_devsel_out ; |
wire pciu_pciif_trdy_en_out ; |
wire pciu_pciif_stop_en_out ; |
wire pciu_pciif_devsel_en_out ; |
wire pciu_ad_load_out ; |
wire pciu_ad_load_on_transfer_out ; |
wire [31:0] pciu_pciif_ad_out ; |
wire pciu_pciif_ad_en_out ; |
wire pciu_pciif_tabort_set_out ; |
wire [31:0] pciu_err_addr_out ; |
wire [3:0] pciu_err_bc_out ; |
wire [31:0] pciu_err_data_out ; |
wire [3:0] pciu_err_be_out ; |
wire pciu_err_signal_out ; |
wire pciu_err_source_out ; |
wire pciu_err_rty_exp_out ; |
wire pciu_conf_select_out ; |
wire [11:0] pciu_conf_offset_out ; |
wire pciu_conf_renable_out ; |
wire pciu_conf_wenable_out ; |
wire [3:0] pciu_conf_be_out ; |
wire [31:0] pciu_conf_data_out ; |
wire pciu_pci_drcomp_pending_out ; |
wire pciu_pciw_fifo_empty_out ; |
|
// assign pci target unit's outputs to top outputs where possible |
assign wbm_adr_o = pciu_adr_out ; |
assign wbm_dat_o = pciu_mdata_out ; |
assign wbm_cyc_o = pciu_cyc_out ; |
assign wbm_stb_o = pciu_stb_out ; |
assign wbm_we_o = pciu_we_out ; |
assign wbm_sel_o = pciu_sel_out ; |
assign wbm_cab_o = pciu_cab_out ; |
|
// CONFIGURATION SPACE OUTPUTS |
wire [31:0] conf_w_data_out ; |
wire [31:0] conf_r_data_out ; |
wire conf_serr_enable_out ; |
wire conf_perr_response_out ; |
wire conf_pci_master_enable_out ; |
wire conf_mem_space_enable_out ; |
wire conf_io_space_enable_out ; |
wire [7:0] conf_cache_line_size_to_pci_out ; |
wire [7:0] conf_cache_line_size_to_wb_out ; |
wire conf_cache_lsize_not_zero_to_wb_out ; |
wire [7:0] conf_latency_tim_out ; |
|
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba0_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba1_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba2_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba3_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba4_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ba5_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta0_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta1_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta2_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta3_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta4_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_ta5_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am0_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am1_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am2_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am3_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am4_out ; |
wire [19:(20 - `PCI_NUM_OF_DEC_ADDR_LINES)] conf_pci_am5_out ; |
|
wire conf_pci_mem_io0_out ; |
wire conf_pci_mem_io1_out ; |
wire conf_pci_mem_io2_out ; |
wire conf_pci_mem_io3_out ; |
wire conf_pci_mem_io4_out ; |
wire conf_pci_mem_io5_out ; |
|
wire [1:0] conf_pci_img_ctrl0_out ; |
wire [1:0] conf_pci_img_ctrl1_out ; |
wire [1:0] conf_pci_img_ctrl2_out ; |
wire [1:0] conf_pci_img_ctrl3_out ; |
wire [1:0] conf_pci_img_ctrl4_out ; |
wire [1:0] conf_pci_img_ctrl5_out ; |
|
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba0_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba1_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba2_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba3_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba4_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ba5_out ; |
|
wire conf_wb_mem_io0_out ; |
wire conf_wb_mem_io1_out ; |
wire conf_wb_mem_io2_out ; |
wire conf_wb_mem_io3_out ; |
wire conf_wb_mem_io4_out ; |
wire conf_wb_mem_io5_out ; |
|
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am0_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am1_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am2_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am3_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am4_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_am5_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta0_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta1_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta2_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta3_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta4_out ; |
wire [19:(20 - `WB_NUM_OF_DEC_ADDR_LINES)] conf_wb_ta5_out ; |
wire [2:0] conf_wb_img_ctrl0_out ; |
wire [2:0] conf_wb_img_ctrl1_out ; |
wire [2:0] conf_wb_img_ctrl2_out ; |
wire [2:0] conf_wb_img_ctrl3_out ; |
wire [2:0] conf_wb_img_ctrl4_out ; |
wire [2:0] conf_wb_img_ctrl5_out ; |
wire [23:0] conf_ccyc_addr_out ; |
wire conf_soft_res_out ; |
wire conf_int_out ; |
|
// PCI IO MUX OUTPUTS |
wire pci_mux_frame_out ; |
wire pci_mux_irdy_out ; |
wire pci_mux_devsel_out ; |
wire pci_mux_trdy_out ; |
wire pci_mux_stop_out ; |
wire [3:0] pci_mux_cbe_out ; |
wire [31:0] pci_mux_ad_out ; |
wire pci_mux_ad_load_out ; |
|
wire [31:0] pci_mux_ad_en_out ; |
wire pci_mux_ad_en_unregistered_out ; |
wire pci_mux_frame_en_out ; |
wire pci_mux_irdy_en_out ; |
wire pci_mux_devsel_en_out ; |
wire pci_mux_trdy_en_out ; |
wire pci_mux_stop_en_out ; |
wire [3:0] pci_mux_cbe_en_out ; |
|
wire pci_mux_par_out ; |
wire pci_mux_par_en_out ; |
wire pci_mux_perr_out ; |
wire pci_mux_perr_en_out ; |
wire pci_mux_serr_out ; |
wire pci_mux_serr_en_out ; |
|
wire pci_mux_req_out ; |
wire pci_mux_req_en_out ; |
|
// assign outputs to top level outputs |
|
assign pci_ad_oe_o = pci_mux_ad_en_out ; |
assign pci_frame_oe_o = pci_mux_frame_en_out ; |
assign pci_irdy_oe_o = pci_mux_irdy_en_out ; |
assign pci_cbe_oe_o = pci_mux_cbe_en_out ; |
|
assign pci_par_o = pci_mux_par_out ; |
assign pci_par_oe_o = pci_mux_par_en_out ; |
assign pci_perr_o = pci_mux_perr_out ; |
assign pci_perr_oe_o = pci_mux_perr_en_out ; |
assign pci_serr_o = pci_mux_serr_out ; |
assign pci_serr_oe_o = pci_mux_serr_en_out ; |
|
assign pci_req_o = pci_mux_req_out ; |
assign pci_req_oe_o = pci_mux_req_en_out ; |
|
assign pci_trdy_oe_o = pci_mux_trdy_en_out ; |
assign pci_devsel_oe_o = pci_mux_devsel_en_out ; |
assign pci_stop_oe_o = pci_mux_stop_en_out ; |
assign pci_trdy_o = pci_mux_trdy_out ; |
assign pci_devsel_o = pci_mux_devsel_out ; |
assign pci_stop_o = pci_mux_stop_out ; |
|
assign pci_ad_o = pci_mux_ad_out ; |
assign pci_frame_o = pci_mux_frame_out ; |
assign pci_irdy_o = pci_mux_irdy_out ; |
assign pci_cbe_o = pci_mux_cbe_out ; |
|
// duplicate output register's outputs |
wire out_bckp_frame_out ; |
wire out_bckp_irdy_out ; |
wire out_bckp_devsel_out ; |
wire out_bckp_trdy_out ; |
wire out_bckp_stop_out ; |
wire [3:0] out_bckp_cbe_out ; |
wire out_bckp_cbe_en_out ; |
wire [31:0] out_bckp_ad_out ; |
wire out_bckp_ad_en_out ; |
wire out_bckp_irdy_en_out ; |
wire out_bckp_frame_en_out ; |
wire out_bckp_tar_ad_en_out ; |
wire out_bckp_mas_ad_en_out ; |
wire out_bckp_trdy_en_out ; |
|
wire out_bckp_par_out ; |
wire out_bckp_par_en_out ; |
wire out_bckp_perr_out ; |
wire out_bckp_perr_en_out ; |
wire out_bckp_serr_out ; |
wire out_bckp_serr_en_out ; |
|
|
// PARITY CHECKER OUTPUTS |
wire parchk_pci_par_out ; |
wire parchk_pci_par_en_out ; |
wire parchk_pci_perr_out ; |
wire parchk_pci_perr_en_out ; |
wire parchk_pci_serr_out ; |
wire parchk_pci_serr_en_out ; |
wire parchk_par_err_detect_out ; |
wire parchk_perr_mas_detect_out ; |
wire parchk_sig_serr_out ; |
|
// input register outputs |
wire in_reg_gnt_out ; |
wire in_reg_frame_out ; |
wire in_reg_irdy_out ; |
wire in_reg_trdy_out ; |
wire in_reg_stop_out ; |
wire in_reg_devsel_out ; |
wire in_reg_idsel_out ; |
wire [31:0] in_reg_ad_out ; |
wire [3:0] in_reg_cbe_out ; |
|
/*========================================================================================================= |
Now comes definition of all modules' and their appropriate inputs |
=========================================================================================================*/ |
// PCI BRIDGE RESET AND INTERRUPT LOGIC INPUTS |
wire pci_resi_rst_i = wb_rst_i ; |
wire pci_resi_pci_rstn_in = pci_rst_i ; |
wire pci_resi_conf_soft_res_in = conf_soft_res_out ; |
wire pci_inti_pci_intan_in = pci_inta_i ; |
wire pci_inti_conf_int_in = conf_int_out ; |
wire pci_inti_int_i = wb_int_i ; |
wire pci_inti_out_bckp_perr_en_in = out_bckp_perr_en_out ; |
wire pci_inti_out_bckp_serr_en_in = out_bckp_serr_en_out ; |
|
pci_rst_int pci_resets_and_interrupts |
( |
.clk_in (pci_clk), |
.rst_i (pci_resi_rst_i), |
.pci_rstn_in (pci_resi_pci_rstn_in), |
.conf_soft_res_in (pci_resi_conf_soft_res_in), |
.reset (pci_reso_reset), |
.pci_rstn_out (pci_reso_pci_rstn_out), |
.pci_rstn_en_out (pci_reso_pci_rstn_en_out), |
.rst_o (pci_reso_rst_o), |
.pci_intan_in (pci_inti_pci_intan_in), |
.conf_int_in (pci_inti_conf_int_in), |
.int_i (pci_inti_int_i), |
.out_bckp_perr_en_in (pci_inti_out_bckp_perr_en_in), |
.out_bckp_serr_en_in (pci_inti_out_bckp_serr_en_in), |
.pci_intan_out (pci_into_pci_intan_out), |
.pci_intan_en_out (pci_into_pci_intan_en_out), |
.int_o (pci_into_int_o), |
.conf_isr_int_prop_out (pci_into_conf_isr_int_prop_out) |
); |
|
// WISHBONE SLAVE UNIT INPUTS |
wire [31:0] wbu_addr_in = wbs_adr_i ; |
wire [31:0] wbu_sdata_in = wbs_dat_i ; |
wire wbu_cyc_in = wbs_cyc_i ; |
wire wbu_stb_in = wbs_stb_i ; |
wire wbu_we_in = wbs_we_i ; |
wire [3:0] wbu_sel_in = wbs_sel_i ; |
wire wbu_cab_in = wbs_cab_i ; |
|
wire [5:0] wbu_map_in = { |
conf_wb_mem_io5_out, |
conf_wb_mem_io4_out, |
conf_wb_mem_io3_out, |
conf_wb_mem_io2_out, |
conf_wb_mem_io1_out, |
conf_wb_mem_io0_out |
} ; |
|
wire [5:0] wbu_pref_en_in = { |
conf_wb_img_ctrl5_out[1], |
conf_wb_img_ctrl4_out[1], |
conf_wb_img_ctrl3_out[1], |
conf_wb_img_ctrl2_out[1], |
conf_wb_img_ctrl1_out[1], |
conf_wb_img_ctrl0_out[1] |
}; |
wire [5:0] wbu_mrl_en_in = { |
conf_wb_img_ctrl5_out[0], |
conf_wb_img_ctrl4_out[0], |
conf_wb_img_ctrl3_out[0], |
conf_wb_img_ctrl2_out[0], |
conf_wb_img_ctrl1_out[0], |
conf_wb_img_ctrl0_out[0] |
}; |
|
wire [5:0] wbu_at_en_in = { |
conf_wb_img_ctrl5_out[2], |
conf_wb_img_ctrl4_out[2], |
conf_wb_img_ctrl3_out[2], |
conf_wb_img_ctrl2_out[2], |
conf_wb_img_ctrl1_out[2], |
conf_wb_img_ctrl0_out[2] |
} ; |
|
wire wbu_pci_drcomp_pending_in = pciu_pci_drcomp_pending_out ; |
wire wbu_pciw_empty_in = pciu_pciw_fifo_empty_out ; |
|
`ifdef HOST |
wire [31:0] wbu_conf_data_in = conf_w_data_out ; |
`else |
`ifdef GUEST |
wire [31:0] wbu_conf_data_in = conf_r_data_out ; |
`endif |
`endif |
|
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar0_in = conf_wb_ba0_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar1_in = conf_wb_ba1_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar2_in = conf_wb_ba2_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar3_in = conf_wb_ba3_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar4_in = conf_wb_ba4_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar5_in = conf_wb_ba5_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am0_in = conf_wb_am0_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am1_in = conf_wb_am1_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am2_in = conf_wb_am2_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am3_in = conf_wb_am3_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am4_in = conf_wb_am4_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am5_in = conf_wb_am5_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta0_in = conf_wb_ta0_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta1_in = conf_wb_ta1_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta2_in = conf_wb_ta2_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta3_in = conf_wb_ta3_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta4_in = conf_wb_ta4_out ; |
wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta5_in = conf_wb_ta5_out ; |
|
wire [23:0] wbu_ccyc_addr_in = conf_ccyc_addr_out ; |
wire wbu_master_enable_in = conf_pci_master_enable_out ; |
wire wbu_cache_line_size_not_zero = conf_cache_lsize_not_zero_to_wb_out ; |
wire [7:0] wbu_cache_line_size_in = conf_cache_line_size_to_pci_out ; |
|
wire wbu_pciif_gnt_in = pci_gnt_i ; |
wire wbu_pciif_frame_in = in_reg_frame_out ; |
wire wbu_pciif_irdy_in = in_reg_irdy_out ; |
wire wbu_pciif_trdy_in = pci_trdy_i ; |
wire wbu_pciif_stop_in = pci_stop_i ; |
wire wbu_pciif_devsel_in = pci_devsel_i ; |
wire [31:0] wbu_pciif_ad_reg_in = in_reg_ad_out ; |
wire wbu_pciif_trdy_reg_in = in_reg_trdy_out ; |
wire wbu_pciif_stop_reg_in = in_reg_stop_out ; |
wire wbu_pciif_devsel_reg_in = in_reg_devsel_out ; |
|
|
wire [7:0] wbu_latency_tim_val_in = conf_latency_tim_out ; |
|
wire wbu_pciif_frame_en_in = out_bckp_frame_en_out ; |
wire wbu_pciif_frame_out_in = out_bckp_frame_out ; |
|
pci_wb_slave_unit wishbone_slave_unit |
( |
.reset_in (reset), |
.wb_clock_in (wb_clk), |
.pci_clock_in (pci_clk), |
.ADDR_I (wbu_addr_in), |
.SDATA_I (wbu_sdata_in), |
.SDATA_O (wbu_sdata_out), |
.CYC_I (wbu_cyc_in), |
.STB_I (wbu_stb_in), |
.WE_I (wbu_we_in), |
.SEL_I (wbu_sel_in), |
.ACK_O (wbu_ack_out), |
.RTY_O (wbu_rty_out), |
.ERR_O (wbu_err_out), |
.CAB_I (wbu_cab_in), |
.wbu_map_in (wbu_map_in), |
.wbu_pref_en_in (wbu_pref_en_in), |
.wbu_mrl_en_in (wbu_mrl_en_in), |
.wbu_pci_drcomp_pending_in (wbu_pci_drcomp_pending_in), |
.wbu_conf_data_in (wbu_conf_data_in), |
.wbu_pciw_empty_in (wbu_pciw_empty_in), |
.wbu_bar0_in (wbu_bar0_in), |
.wbu_bar1_in (wbu_bar1_in), |
.wbu_bar2_in (wbu_bar2_in), |
.wbu_bar3_in (wbu_bar3_in), |
.wbu_bar4_in (wbu_bar4_in), |
.wbu_bar5_in (wbu_bar5_in), |
.wbu_am0_in (wbu_am0_in), |
.wbu_am1_in (wbu_am1_in), |
.wbu_am2_in (wbu_am2_in), |
.wbu_am3_in (wbu_am3_in), |
.wbu_am4_in (wbu_am4_in), |
.wbu_am5_in (wbu_am5_in), |
.wbu_ta0_in (wbu_ta0_in), |
.wbu_ta1_in (wbu_ta1_in), |
.wbu_ta2_in (wbu_ta2_in), |
.wbu_ta3_in (wbu_ta3_in), |
.wbu_ta4_in (wbu_ta4_in), |
.wbu_ta5_in (wbu_ta5_in), |
.wbu_at_en_in (wbu_at_en_in), |
.wbu_ccyc_addr_in (wbu_ccyc_addr_in), |
.wbu_master_enable_in (wbu_master_enable_in), |
.wbu_cache_line_size_not_zero (wbu_cache_line_size_not_zero), |
.wbu_cache_line_size_in (wbu_cache_line_size_in), |
.wbu_pciif_gnt_in (wbu_pciif_gnt_in), |
.wbu_pciif_frame_in (wbu_pciif_frame_in), |
.wbu_pciif_frame_en_in (wbu_pciif_frame_en_in), |
.wbu_pciif_frame_out_in (wbu_pciif_frame_out_in), |
.wbu_pciif_irdy_in (wbu_pciif_irdy_in), |
.wbu_pciif_trdy_in (wbu_pciif_trdy_in), |
.wbu_pciif_stop_in (wbu_pciif_stop_in), |
.wbu_pciif_devsel_in (wbu_pciif_devsel_in), |
.wbu_pciif_ad_reg_in (wbu_pciif_ad_reg_in), |
.wbu_pciif_req_out (wbu_pciif_req_out), |
.wbu_pciif_frame_out (wbu_pciif_frame_out), |
.wbu_pciif_frame_en_out (wbu_pciif_frame_en_out), |
.wbu_pciif_frame_load_out (wbu_pciif_frame_load_out), |
.wbu_pciif_irdy_out (wbu_pciif_irdy_out), |
.wbu_pciif_irdy_en_out (wbu_pciif_irdy_en_out), |
.wbu_pciif_ad_out (wbu_pciif_ad_out), |
.wbu_pciif_ad_en_out (wbu_pciif_ad_en_out), |
.wbu_pciif_cbe_out (wbu_pciif_cbe_out), |
.wbu_pciif_cbe_en_out (wbu_pciif_cbe_en_out), |
.wbu_err_addr_out (wbu_err_addr_out), |
.wbu_err_bc_out (wbu_err_bc_out), |
.wbu_err_signal_out (wbu_err_signal_out), |
.wbu_err_source_out (wbu_err_source_out), |
.wbu_err_rty_exp_out (wbu_err_rty_exp_out), |
.wbu_tabort_rec_out (wbu_tabort_rec_out), |
.wbu_mabort_rec_out (wbu_mabort_rec_out), |
.wbu_conf_offset_out (wbu_conf_offset_out), |
.wbu_conf_renable_out (wbu_conf_renable_out), |
.wbu_conf_wenable_out (wbu_conf_wenable_out), |
.wbu_conf_be_out (wbu_conf_be_out), |
.wbu_conf_data_out (wbu_conf_data_out), |
.wbu_del_read_comp_pending_out (wbu_del_read_comp_pending_out), |
.wbu_wbw_fifo_empty_out (wbu_wbw_fifo_empty_out), |
.wbu_latency_tim_val_in (wbu_latency_tim_val_in), |
.wbu_ad_load_out (wbu_ad_load_out), |
.wbu_ad_load_on_transfer_out (wbu_ad_load_on_transfer_out), |
.wbu_pciif_trdy_reg_in (wbu_pciif_trdy_reg_in), |
.wbu_pciif_stop_reg_in (wbu_pciif_stop_reg_in), |
.wbu_pciif_devsel_reg_in (wbu_pciif_devsel_reg_in) |
|
`ifdef PCI_BIST |
, |
.scanb_rst (scanb_rst), |
.scanb_clk (scanb_clk), |
.scanb_si (scanb_si), |
.scanb_so (scanb_so_internal), |
.scanb_en (scanb_en) |
`endif |
); |
|
// PCI TARGET UNIT INPUTS |
wire [31:0] pciu_mdata_in = wbm_dat_i ; |
wire pciu_ack_in = wbm_ack_i ; |
wire pciu_rty_in = wbm_rty_i ; |
wire pciu_err_in = wbm_err_i ; |
|
wire [5:0] pciu_map_in = { |
conf_pci_mem_io5_out, |
conf_pci_mem_io4_out, |
conf_pci_mem_io3_out, |
conf_pci_mem_io2_out, |
conf_pci_mem_io1_out, |
conf_pci_mem_io0_out |
} ; |
|
wire [5:0] pciu_pref_en_in = { |
conf_pci_img_ctrl5_out[0], |
conf_pci_img_ctrl4_out[0], |
conf_pci_img_ctrl3_out[0], |
conf_pci_img_ctrl2_out[0], |
conf_pci_img_ctrl1_out[0], |
conf_pci_img_ctrl0_out[0] |
}; |
|
wire [5:0] pciu_at_en_in = { |
conf_pci_img_ctrl5_out[1], |
conf_pci_img_ctrl4_out[1], |
conf_pci_img_ctrl3_out[1], |
conf_pci_img_ctrl2_out[1], |
conf_pci_img_ctrl1_out[1], |
conf_pci_img_ctrl0_out[1] |
} ; |
|
wire pciu_mem_enable_in = conf_mem_space_enable_out ; |
wire pciu_io_enable_in = conf_io_space_enable_out ; |
|
wire pciu_wbw_fifo_empty_in = wbu_wbw_fifo_empty_out ; |
wire pciu_wbu_del_read_comp_pending_in = wbu_del_read_comp_pending_out ; |
wire pciu_wbu_frame_en_in = out_bckp_frame_en_out ; |
|
`ifdef HOST |
wire [31:0] pciu_conf_data_in = conf_r_data_out ; |
`else |
`ifdef GUEST |
wire [31:0] pciu_conf_data_in = conf_w_data_out ; |
`endif |
`endif |
|
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar0_in = conf_pci_ba0_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar1_in = conf_pci_ba1_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar2_in = conf_pci_ba2_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar3_in = conf_pci_ba3_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar4_in = conf_pci_ba4_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_bar5_in = conf_pci_ba5_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am0_in = conf_pci_am0_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am1_in = conf_pci_am1_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am2_in = conf_pci_am2_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am3_in = conf_pci_am3_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am4_in = conf_pci_am4_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_am5_in = conf_pci_am5_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta0_in = conf_pci_ta0_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta1_in = conf_pci_ta1_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta2_in = conf_pci_ta2_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta3_in = conf_pci_ta3_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta4_in = conf_pci_ta4_out ; |
wire [(`PCI_NUM_OF_DEC_ADDR_LINES - 1):0] pciu_ta5_in = conf_pci_ta5_out ; |
|
wire [7:0] pciu_cache_line_size_in = conf_cache_line_size_to_wb_out ; |
wire pciu_cache_lsize_not_zero_in = conf_cache_lsize_not_zero_to_wb_out ; |
|
wire pciu_pciif_frame_in = pci_frame_i ; |
wire pciu_pciif_irdy_in = pci_irdy_i ; |
wire pciu_pciif_idsel_in = pci_idsel_i ; |
wire pciu_pciif_frame_reg_in = in_reg_frame_out ; |
wire pciu_pciif_irdy_reg_in = in_reg_irdy_out ; |
wire pciu_pciif_idsel_reg_in = in_reg_idsel_out ; |
wire [31:0] pciu_pciif_ad_reg_in = in_reg_ad_out ; |
wire [3:0] pciu_pciif_cbe_reg_in = in_reg_cbe_out ; |
|
wire pciu_pciif_bckp_trdy_en_in = out_bckp_trdy_en_out ; |
wire pciu_pciif_bckp_devsel_in = out_bckp_devsel_out ; |
wire pciu_pciif_bckp_trdy_in = out_bckp_trdy_out ; |
wire pciu_pciif_bckp_stop_in = out_bckp_stop_out ; |
wire pciu_pciif_trdy_reg_in = in_reg_trdy_out ; |
wire pciu_pciif_stop_reg_in = in_reg_stop_out ; |
|
pci_target_unit pci_target_unit |
( |
.reset_in (reset), |
.wb_clock_in (wb_clk), |
.pci_clock_in (pci_clk), |
.ADR_O (pciu_adr_out), |
.MDATA_O (pciu_mdata_out), |
.MDATA_I (pciu_mdata_in), |
.CYC_O (pciu_cyc_out), |
.STB_O (pciu_stb_out), |
.WE_O (pciu_we_out), |
.SEL_O (pciu_sel_out), |
.ACK_I (pciu_ack_in), |
.RTY_I (pciu_rty_in), |
.ERR_I (pciu_err_in), |
.CAB_O (pciu_cab_out), |
.pciu_mem_enable_in (pciu_mem_enable_in), |
.pciu_io_enable_in (pciu_io_enable_in), |
.pciu_map_in (pciu_map_in), |
.pciu_pref_en_in (pciu_pref_en_in), |
.pciu_conf_data_in (pciu_conf_data_in), |
.pciu_wbw_fifo_empty_in (pciu_wbw_fifo_empty_in), |
.pciu_wbu_del_read_comp_pending_in (pciu_wbu_del_read_comp_pending_in), |
.pciu_wbu_frame_en_in (pciu_wbu_frame_en_in), |
.pciu_bar0_in (pciu_bar0_in), |
.pciu_bar1_in (pciu_bar1_in), |
.pciu_bar2_in (pciu_bar2_in), |
.pciu_bar3_in (pciu_bar3_in), |
.pciu_bar4_in (pciu_bar4_in), |
.pciu_bar5_in (pciu_bar5_in), |
.pciu_am0_in (pciu_am0_in), |
.pciu_am1_in (pciu_am1_in), |
.pciu_am2_in (pciu_am2_in), |
.pciu_am3_in (pciu_am3_in), |
.pciu_am4_in (pciu_am4_in), |
.pciu_am5_in (pciu_am5_in), |
.pciu_ta0_in (pciu_ta0_in), |
.pciu_ta1_in (pciu_ta1_in), |
.pciu_ta2_in (pciu_ta2_in), |
.pciu_ta3_in (pciu_ta3_in), |
.pciu_ta4_in (pciu_ta4_in), |
.pciu_ta5_in (pciu_ta5_in), |
.pciu_at_en_in (pciu_at_en_in), |
.pciu_cache_line_size_in (pciu_cache_line_size_in), |
.pciu_cache_lsize_not_zero_in (pciu_cache_lsize_not_zero_in), |
.pciu_pciif_frame_in (pciu_pciif_frame_in), |
.pciu_pciif_irdy_in (pciu_pciif_irdy_in), |
.pciu_pciif_idsel_in (pciu_pciif_idsel_in), |
.pciu_pciif_frame_reg_in (pciu_pciif_frame_reg_in), |
.pciu_pciif_irdy_reg_in (pciu_pciif_irdy_reg_in), |
.pciu_pciif_idsel_reg_in (pciu_pciif_idsel_reg_in), |
.pciu_pciif_ad_reg_in (pciu_pciif_ad_reg_in), |
.pciu_pciif_cbe_reg_in (pciu_pciif_cbe_reg_in), |
.pciu_pciif_bckp_trdy_en_in (pciu_pciif_bckp_trdy_en_in), |
.pciu_pciif_bckp_devsel_in (pciu_pciif_bckp_devsel_in), |
.pciu_pciif_bckp_trdy_in (pciu_pciif_bckp_trdy_in), |
.pciu_pciif_bckp_stop_in (pciu_pciif_bckp_stop_in), |
.pciu_pciif_trdy_reg_in (pciu_pciif_trdy_reg_in), |
.pciu_pciif_stop_reg_in (pciu_pciif_stop_reg_in), |
.pciu_pciif_trdy_out (pciu_pciif_trdy_out), |
.pciu_pciif_stop_out (pciu_pciif_stop_out), |
.pciu_pciif_devsel_out (pciu_pciif_devsel_out), |
.pciu_pciif_trdy_en_out (pciu_pciif_trdy_en_out), |
.pciu_pciif_stop_en_out (pciu_pciif_stop_en_out), |
.pciu_pciif_devsel_en_out (pciu_pciif_devsel_en_out), |
.pciu_ad_load_out (pciu_ad_load_out), |
.pciu_ad_load_on_transfer_out (pciu_ad_load_on_transfer_out), |
.pciu_pciif_ad_out (pciu_pciif_ad_out), |
.pciu_pciif_ad_en_out (pciu_pciif_ad_en_out), |
.pciu_pciif_tabort_set_out (pciu_pciif_tabort_set_out), |
.pciu_err_addr_out (pciu_err_addr_out), |
.pciu_err_bc_out (pciu_err_bc_out), |
.pciu_err_data_out (pciu_err_data_out), |
.pciu_err_be_out (pciu_err_be_out), |
.pciu_err_signal_out (pciu_err_signal_out), |
.pciu_err_source_out (pciu_err_source_out), |
.pciu_err_rty_exp_out (pciu_err_rty_exp_out), |
.pciu_conf_offset_out (pciu_conf_offset_out), |
.pciu_conf_renable_out (pciu_conf_renable_out), |
.pciu_conf_wenable_out (pciu_conf_wenable_out), |
.pciu_conf_be_out (pciu_conf_be_out), |
.pciu_conf_data_out (pciu_conf_data_out), |
.pciu_conf_select_out (pciu_conf_select_out), |
.pciu_pci_drcomp_pending_out (pciu_pci_drcomp_pending_out), |
.pciu_pciw_fifo_empty_out (pciu_pciw_fifo_empty_out) |
|
`ifdef PCI_BIST |
, |
.scanb_rst (scanb_rst), |
.scanb_clk (scanb_clk), |
.scanb_si (scanb_so_internal), |
.scanb_so (scanb_so), |
.scanb_en (scanb_en) |
`endif |
); |
|
|
// CONFIGURATION SPACE INPUTS |
`ifdef HOST |
|
wire [11:0] conf_w_addr_in = wbu_conf_offset_out ; |
wire [31:0] conf_w_data_in = wbu_conf_data_out ; |
wire conf_w_we_in = wbu_conf_wenable_out ; |
wire conf_w_re_in = wbu_conf_renable_out ; |
wire [3:0] conf_w_be_in = wbu_conf_be_out ; |
wire conf_w_clock = wb_clk ; |
wire [11:0] conf_r_addr_in = pciu_conf_offset_out ; |
wire conf_r_re_in = pciu_conf_renable_out ; |
|
`else |
`ifdef GUEST |
|
wire [11:0] conf_r_addr_in = wbu_conf_offset_out ; |
wire conf_r_re_in = wbu_conf_renable_out ; |
wire conf_w_clock = pci_clk ; |
wire [11:0] conf_w_addr_in = pciu_conf_offset_out ; |
wire [31:0] conf_w_data_in = pciu_conf_data_out ; |
wire conf_w_we_in = pciu_conf_wenable_out ; |
wire conf_w_re_in = pciu_conf_renable_out ; |
wire [3:0] conf_w_be_in = pciu_conf_be_out ; |
|
`endif |
`endif |
|
|
wire conf_perr_in = parchk_par_err_detect_out ; |
wire conf_serr_in = parchk_sig_serr_out ; |
wire conf_master_abort_recv_in = wbu_mabort_rec_out ; |
wire conf_target_abort_recv_in = wbu_tabort_rec_out ; |
wire conf_target_abort_set_in = pciu_pciif_tabort_set_out ; |
|
wire conf_master_data_par_err_in = parchk_perr_mas_detect_out ; |
|
wire [3:0] conf_pci_err_be_in = pciu_err_be_out ; |
wire [3:0] conf_pci_err_bc_in = pciu_err_bc_out; |
wire conf_pci_err_es_in = pciu_err_source_out ; |
wire conf_pci_err_rty_exp_in = pciu_err_rty_exp_out ; |
wire conf_pci_err_sig_in = pciu_err_signal_out ; |
wire [31:0] conf_pci_err_addr_in = pciu_err_addr_out ; |
wire [31:0] conf_pci_err_data_in = pciu_err_data_out ; |
|
wire [3:0] conf_wb_err_be_in = out_bckp_cbe_out ; |
wire [3:0] conf_wb_err_bc_in = wbu_err_bc_out ; |
wire conf_wb_err_rty_exp_in = wbu_err_rty_exp_out ; |
wire conf_wb_err_es_in = wbu_err_source_out ; |
wire conf_wb_err_sig_in = wbu_err_signal_out ; |
wire [31:0] conf_wb_err_addr_in = wbu_err_addr_out ; |
wire [31:0] conf_wb_err_data_in = out_bckp_ad_out ; |
|
wire conf_isr_int_prop_in = pci_into_conf_isr_int_prop_out ; |
wire conf_par_err_int_in = parchk_perr_mas_detect_out ; |
wire conf_sys_err_int_in = parchk_sig_serr_out ; |
|
pci_conf_space configuration( |
.reset (reset), |
.pci_clk (pci_clk), |
.wb_clk (wb_clk), |
.w_conf_address_in (conf_w_addr_in), |
.w_conf_data_in (conf_w_data_in), |
.w_conf_data_out (conf_w_data_out), |
.r_conf_address_in (conf_r_addr_in), |
.r_conf_data_out (conf_r_data_out), |
.w_we (conf_w_we_in), |
.w_re (conf_w_re_in), |
.r_re (conf_r_re_in), |
.w_byte_en (conf_w_be_in), |
.w_clock (conf_w_clock), |
.serr_enable (conf_serr_enable_out), |
.perr_response (conf_perr_response_out), |
.pci_master_enable (conf_pci_master_enable_out), |
.memory_space_enable (conf_mem_space_enable_out), |
.io_space_enable (conf_io_space_enable_out), |
.perr_in (conf_perr_in), |
.serr_in (conf_serr_in), |
.master_abort_recv (conf_master_abort_recv_in), |
.target_abort_recv (conf_target_abort_recv_in), |
.target_abort_set (conf_target_abort_set_in), |
.master_data_par_err (conf_master_data_par_err_in), |
.cache_line_size_to_pci (conf_cache_line_size_to_pci_out), |
.cache_line_size_to_wb (conf_cache_line_size_to_wb_out), |
.cache_lsize_not_zero_to_wb (conf_cache_lsize_not_zero_to_wb_out), |
.latency_tim (conf_latency_tim_out), |
.pci_base_addr0 (conf_pci_ba0_out), |
.pci_base_addr1 (conf_pci_ba1_out), |
.pci_base_addr2 (conf_pci_ba2_out), |
.pci_base_addr3 (conf_pci_ba3_out), |
.pci_base_addr4 (conf_pci_ba4_out), |
.pci_base_addr5 (conf_pci_ba5_out), |
.pci_memory_io0 (conf_pci_mem_io0_out), |
.pci_memory_io1 (conf_pci_mem_io1_out), |
.pci_memory_io2 (conf_pci_mem_io2_out), |
.pci_memory_io3 (conf_pci_mem_io3_out), |
.pci_memory_io4 (conf_pci_mem_io4_out), |
.pci_memory_io5 (conf_pci_mem_io5_out), |
.pci_addr_mask0 (conf_pci_am0_out), |
.pci_addr_mask1 (conf_pci_am1_out), |
.pci_addr_mask2 (conf_pci_am2_out), |
.pci_addr_mask3 (conf_pci_am3_out), |
.pci_addr_mask4 (conf_pci_am4_out), |
.pci_addr_mask5 (conf_pci_am5_out), |
.pci_tran_addr0 (conf_pci_ta0_out), |
.pci_tran_addr1 (conf_pci_ta1_out), |
.pci_tran_addr2 (conf_pci_ta2_out), |
.pci_tran_addr3 (conf_pci_ta3_out), |
.pci_tran_addr4 (conf_pci_ta4_out), |
.pci_tran_addr5 (conf_pci_ta5_out), |
.pci_img_ctrl0 (conf_pci_img_ctrl0_out), |
.pci_img_ctrl1 (conf_pci_img_ctrl1_out), |
.pci_img_ctrl2 (conf_pci_img_ctrl2_out), |
.pci_img_ctrl3 (conf_pci_img_ctrl3_out), |
.pci_img_ctrl4 (conf_pci_img_ctrl4_out), |
.pci_img_ctrl5 (conf_pci_img_ctrl5_out), |
.pci_error_be (conf_pci_err_be_in), |
.pci_error_bc (conf_pci_err_bc_in), |
.pci_error_rty_exp (conf_pci_err_rty_exp_in), |
.pci_error_es (conf_pci_err_es_in), |
.pci_error_sig (conf_pci_err_sig_in), |
.pci_error_addr (conf_pci_err_addr_in), |
.pci_error_data (conf_pci_err_data_in), |
.wb_base_addr0 (conf_wb_ba0_out), |
.wb_base_addr1 (conf_wb_ba1_out), |
.wb_base_addr2 (conf_wb_ba2_out), |
.wb_base_addr3 (conf_wb_ba3_out), |
.wb_base_addr4 (conf_wb_ba4_out), |
.wb_base_addr5 (conf_wb_ba5_out), |
.wb_memory_io0 (conf_wb_mem_io0_out), |
.wb_memory_io1 (conf_wb_mem_io1_out), |
.wb_memory_io2 (conf_wb_mem_io2_out), |
.wb_memory_io3 (conf_wb_mem_io3_out), |
.wb_memory_io4 (conf_wb_mem_io4_out), |
.wb_memory_io5 (conf_wb_mem_io5_out), |
.wb_addr_mask0 (conf_wb_am0_out), |
.wb_addr_mask1 (conf_wb_am1_out), |
.wb_addr_mask2 (conf_wb_am2_out), |
.wb_addr_mask3 (conf_wb_am3_out), |
.wb_addr_mask4 (conf_wb_am4_out), |
.wb_addr_mask5 (conf_wb_am5_out), |
.wb_tran_addr0 (conf_wb_ta0_out), |
.wb_tran_addr1 (conf_wb_ta1_out), |
.wb_tran_addr2 (conf_wb_ta2_out), |
.wb_tran_addr3 (conf_wb_ta3_out), |
.wb_tran_addr4 (conf_wb_ta4_out), |
.wb_tran_addr5 (conf_wb_ta5_out), |
.wb_img_ctrl0 (conf_wb_img_ctrl0_out), |
.wb_img_ctrl1 (conf_wb_img_ctrl1_out), |
.wb_img_ctrl2 (conf_wb_img_ctrl2_out), |
.wb_img_ctrl3 (conf_wb_img_ctrl3_out), |
.wb_img_ctrl4 (conf_wb_img_ctrl4_out), |
.wb_img_ctrl5 (conf_wb_img_ctrl5_out), |
.wb_error_be (conf_wb_err_be_in), |
.wb_error_bc (conf_wb_err_bc_in), |
.wb_error_rty_exp (conf_wb_err_rty_exp_in), |
.wb_error_es (conf_wb_err_es_in), |
.wb_error_sig (conf_wb_err_sig_in), |
.wb_error_addr (conf_wb_err_addr_in), |
.wb_error_data (conf_wb_err_data_in), |
.config_addr (conf_ccyc_addr_out), |
.icr_soft_res (conf_soft_res_out), |
.int_out (conf_int_out), |
.isr_int_prop (conf_isr_int_prop_in), |
.isr_par_err_int (conf_par_err_int_in), |
.isr_sys_err_int (conf_sys_err_int_in) |
) ; |
|
// pci data io multiplexer inputs |
wire pci_mux_tar_ad_en_in = pciu_pciif_ad_en_out ; |
wire pci_mux_tar_ad_en_reg_in = out_bckp_tar_ad_en_out ; |
wire [31:0] pci_mux_tar_ad_in = pciu_pciif_ad_out ; |
wire pci_mux_devsel_in = pciu_pciif_devsel_out ; |
wire pci_mux_devsel_en_in = pciu_pciif_devsel_en_out ; |
wire pci_mux_trdy_in = pciu_pciif_trdy_out ; |
wire pci_mux_trdy_en_in = pciu_pciif_trdy_en_out ; |
wire pci_mux_stop_in = pciu_pciif_stop_out ; |
wire pci_mux_stop_en_in = pciu_pciif_stop_en_out ; |
wire pci_mux_tar_load_in = pciu_ad_load_out ; |
wire pci_mux_tar_load_on_transfer_in = pciu_ad_load_on_transfer_out ; |
|
wire pci_mux_mas_ad_en_in = wbu_pciif_ad_en_out ; |
wire [31:0] pci_mux_mas_ad_in = wbu_pciif_ad_out ; |
|
wire pci_mux_frame_in = wbu_pciif_frame_out ; |
wire pci_mux_frame_en_in = wbu_pciif_frame_en_out ; |
wire pci_mux_irdy_in = wbu_pciif_irdy_out; |
wire pci_mux_irdy_en_in = wbu_pciif_irdy_en_out; |
wire pci_mux_mas_load_in = wbu_ad_load_out ; |
wire pci_mux_mas_load_on_transfer_in = wbu_ad_load_on_transfer_out ; |
wire [3:0] pci_mux_cbe_in = wbu_pciif_cbe_out ; |
wire pci_mux_cbe_en_in = wbu_pciif_cbe_en_out ; |
|
wire pci_mux_par_in = parchk_pci_par_out ; |
wire pci_mux_par_en_in = parchk_pci_par_en_out ; |
wire pci_mux_perr_in = parchk_pci_perr_out ; |
wire pci_mux_perr_en_in = parchk_pci_perr_en_out ; |
wire pci_mux_serr_in = parchk_pci_serr_out ; |
wire pci_mux_serr_en_in = parchk_pci_serr_en_out; |
|
wire pci_mux_req_in = wbu_pciif_req_out ; |
wire pci_mux_frame_load_in = wbu_pciif_frame_load_out ; |
|
wire pci_mux_pci_irdy_in = pci_irdy_i ; |
wire pci_mux_pci_trdy_in = pci_trdy_i ; |
wire pci_mux_pci_frame_in = pci_frame_i ; |
wire pci_mux_pci_stop_in = pci_stop_i ; |
|
pci_io_mux pci_io_mux |
( |
.reset_in (reset), |
.clk_in (pci_clk), |
.frame_in (pci_mux_frame_in), |
.frame_en_in (pci_mux_frame_en_in), |
.frame_load_in (pci_mux_frame_load_in), |
.irdy_in (pci_mux_irdy_in), |
.irdy_en_in (pci_mux_irdy_en_in), |
.devsel_in (pci_mux_devsel_in), |
.devsel_en_in (pci_mux_devsel_en_in), |
.trdy_in (pci_mux_trdy_in), |
.trdy_en_in (pci_mux_trdy_en_in), |
.stop_in (pci_mux_stop_in), |
.stop_en_in (pci_mux_stop_en_in), |
.master_load_in (pci_mux_mas_load_in), |
.master_load_on_transfer_in (pci_mux_mas_load_on_transfer_in), |
.target_load_in (pci_mux_tar_load_in), |
.target_load_on_transfer_in (pci_mux_tar_load_on_transfer_in), |
.cbe_in (pci_mux_cbe_in), |
.cbe_en_in (pci_mux_cbe_en_in), |
.mas_ad_in (pci_mux_mas_ad_in), |
.tar_ad_in (pci_mux_tar_ad_in), |
|
.mas_ad_en_in (pci_mux_mas_ad_en_in), |
.tar_ad_en_in (pci_mux_tar_ad_en_in), |
.tar_ad_en_reg_in (pci_mux_tar_ad_en_reg_in), |
|
.par_in (pci_mux_par_in), |
.par_en_in (pci_mux_par_en_in), |
.perr_in (pci_mux_perr_in), |
.perr_en_in (pci_mux_perr_en_in), |
.serr_in (pci_mux_serr_in), |
.serr_en_in (pci_mux_serr_en_in), |
|
.frame_en_out (pci_mux_frame_en_out), |
.irdy_en_out (pci_mux_irdy_en_out), |
.devsel_en_out (pci_mux_devsel_en_out), |
.trdy_en_out (pci_mux_trdy_en_out), |
.stop_en_out (pci_mux_stop_en_out), |
.cbe_en_out (pci_mux_cbe_en_out), |
.ad_en_out (pci_mux_ad_en_out), |
|
.frame_out (pci_mux_frame_out), |
.irdy_out (pci_mux_irdy_out), |
.devsel_out (pci_mux_devsel_out), |
.trdy_out (pci_mux_trdy_out), |
.stop_out (pci_mux_stop_out), |
.cbe_out (pci_mux_cbe_out), |
.ad_out (pci_mux_ad_out), |
.ad_load_out (pci_mux_ad_load_out), |
|
.par_out (pci_mux_par_out), |
.par_en_out (pci_mux_par_en_out), |
.perr_out (pci_mux_perr_out), |
.perr_en_out (pci_mux_perr_en_out), |
.serr_out (pci_mux_serr_out), |
.serr_en_out (pci_mux_serr_en_out), |
.req_in (pci_mux_req_in), |
.req_out (pci_mux_req_out), |
.req_en_out (pci_mux_req_en_out), |
.pci_irdy_in (pci_mux_pci_irdy_in), |
.pci_trdy_in (pci_mux_pci_trdy_in), |
.pci_frame_in (pci_mux_pci_frame_in), |
.pci_stop_in (pci_mux_pci_stop_in), |
.ad_en_unregistered_out (pci_mux_ad_en_unregistered_out) |
); |
|
pci_cur_out_reg output_backup |
( |
.reset_in (reset), |
.clk_in (pci_clk), |
.frame_in (pci_mux_frame_in), |
.frame_en_in (pci_mux_frame_en_in), |
.frame_load_in (pci_mux_frame_load_in), |
.irdy_in (pci_mux_irdy_in), |
.irdy_en_in (pci_mux_irdy_en_in), |
.devsel_in (pci_mux_devsel_in), |
.trdy_in (pci_mux_trdy_in), |
.trdy_en_in (pci_mux_trdy_en_in), |
.stop_in (pci_mux_stop_in), |
.ad_load_in (pci_mux_ad_load_out), |
.cbe_in (pci_mux_cbe_in), |
.cbe_en_in (pci_mux_cbe_en_in), |
.mas_ad_in (pci_mux_mas_ad_in), |
.tar_ad_in (pci_mux_tar_ad_in), |
|
.mas_ad_en_in (pci_mux_mas_ad_en_in), |
.tar_ad_en_in (pci_mux_tar_ad_en_in), |
.ad_en_unregistered_in (pci_mux_ad_en_unregistered_out), |
|
.par_in (pci_mux_par_in), |
.par_en_in (pci_mux_par_en_in), |
.perr_in (pci_mux_perr_in), |
.perr_en_in (pci_mux_perr_en_in), |
.serr_in (pci_mux_serr_in), |
.serr_en_in (pci_mux_serr_en_in), |
|
.frame_out (out_bckp_frame_out), |
.frame_en_out (out_bckp_frame_en_out), |
.irdy_out (out_bckp_irdy_out), |
.irdy_en_out (out_bckp_irdy_en_out), |
.devsel_out (out_bckp_devsel_out), |
.trdy_out (out_bckp_trdy_out), |
.trdy_en_out (out_bckp_trdy_en_out), |
.stop_out (out_bckp_stop_out), |
.cbe_out (out_bckp_cbe_out), |
.ad_out (out_bckp_ad_out), |
.ad_en_out (out_bckp_ad_en_out), |
.cbe_en_out (out_bckp_cbe_en_out), |
.tar_ad_en_out (out_bckp_tar_ad_en_out), |
.mas_ad_en_out (out_bckp_mas_ad_en_out), |
|
.par_out (out_bckp_par_out), |
.par_en_out (out_bckp_par_en_out), |
.perr_out (out_bckp_perr_out), |
.perr_en_out (out_bckp_perr_en_out), |
.serr_out (out_bckp_serr_out), |
.serr_en_out (out_bckp_serr_en_out) |
) ; |
assign irdy_o = out_bckp_irdy_out ; |
assign irdy_en_o = out_bckp_irdy_en_out ; |
assign pci_ad_bckp_o = out_bckp_ad_out ; |
|
// PARITY CHECKER INPUTS |
wire parchk_pci_par_in = pci_par_i ; |
wire parchk_pci_perr_in = pci_perr_i ; |
wire parchk_pci_frame_reg_in = in_reg_frame_out ; |
wire parchk_pci_frame_en_in = out_bckp_frame_en_out ; |
wire parchk_pci_irdy_en_in = out_bckp_irdy_en_out ; |
wire parchk_pci_irdy_reg_in = in_reg_irdy_out ; |
wire parchk_pci_trdy_reg_in = in_reg_trdy_out ; |
|
|
wire parchk_pci_trdy_en_in = out_bckp_trdy_en_out ; |
|
|
wire [31:0] parchk_pci_ad_out_in = out_bckp_ad_out ; |
wire [31:0] parchk_pci_ad_reg_in = in_reg_ad_out ; |
wire [3:0] parchk_pci_cbe_in_in = pci_cbe_i ; |
wire [3:0] parchk_pci_cbe_reg_in = in_reg_cbe_out ; |
wire [3:0] parchk_pci_cbe_out_in = out_bckp_cbe_out ; |
wire parchk_pci_ad_en_in = out_bckp_ad_en_out ; |
wire parchk_par_err_response_in = conf_perr_response_out ; |
wire parchk_serr_enable_in = conf_serr_enable_out ; |
|
wire parchk_pci_perr_out_in = out_bckp_perr_out ; |
wire parchk_pci_serr_en_in = out_bckp_serr_en_out ; |
wire parchk_pci_serr_out_in = out_bckp_serr_out ; |
wire parchk_pci_cbe_en_in = out_bckp_cbe_en_out ; |
|
wire parchk_pci_par_en_in = out_bckp_par_en_out ; |
|
pci_parity_check parity_checker |
( |
.reset_in (reset), |
.clk_in (pci_clk), |
.pci_par_in (parchk_pci_par_in), |
.pci_par_out (parchk_pci_par_out), |
.pci_par_en_out (parchk_pci_par_en_out), |
.pci_par_en_in (parchk_pci_par_en_in), |
.pci_perr_in (parchk_pci_perr_in), |
.pci_perr_out (parchk_pci_perr_out), |
.pci_perr_en_out (parchk_pci_perr_en_out), |
.pci_perr_out_in (parchk_pci_perr_out_in), |
.pci_serr_out (parchk_pci_serr_out), |
.pci_serr_out_in (parchk_pci_serr_out_in), |
.pci_serr_en_out (parchk_pci_serr_en_out), |
.pci_serr_en_in (parchk_pci_serr_en_in), |
.pci_frame_reg_in (parchk_pci_frame_reg_in), |
.pci_frame_en_in (parchk_pci_frame_en_in), |
.pci_irdy_en_in (parchk_pci_irdy_en_in), |
.pci_irdy_reg_in (parchk_pci_irdy_reg_in), |
.pci_trdy_reg_in (parchk_pci_trdy_reg_in), |
.pci_trdy_en_in (parchk_pci_trdy_en_in), |
.pci_ad_out_in (parchk_pci_ad_out_in), |
.pci_ad_reg_in (parchk_pci_ad_reg_in), |
.pci_cbe_in_in (parchk_pci_cbe_in_in), |
.pci_cbe_reg_in (parchk_pci_cbe_reg_in), |
.pci_cbe_en_in (parchk_pci_cbe_en_in), |
.pci_cbe_out_in (parchk_pci_cbe_out_in), |
.pci_ad_en_in (parchk_pci_ad_en_in), |
.par_err_response_in (parchk_par_err_response_in), |
.par_err_detect_out (parchk_par_err_detect_out), |
.perr_mas_detect_out (parchk_perr_mas_detect_out), |
.serr_enable_in (parchk_serr_enable_in), |
.sig_serr_out (parchk_sig_serr_out) |
); |
|
wire in_reg_gnt_in = pci_gnt_i ; |
wire in_reg_frame_in = pci_frame_i ; |
wire in_reg_irdy_in = pci_irdy_i ; |
wire in_reg_trdy_in = pci_trdy_i ; |
wire in_reg_stop_in = pci_stop_i ; |
wire in_reg_devsel_in = pci_devsel_i ; |
wire in_reg_idsel_in = pci_idsel_i ; |
wire [31:0] in_reg_ad_in = pci_ad_i ; |
wire [3:0] in_reg_cbe_in = pci_cbe_i ; |
|
assign trdy_reg_o = in_reg_trdy_out ; |
|
pci_in_reg input_register |
( |
.reset_in (reset), |
.clk_in (pci_clk), |
|
.pci_gnt_in (in_reg_gnt_in), |
.pci_frame_in (in_reg_frame_in), |
.pci_irdy_in (in_reg_irdy_in), |
.pci_trdy_in (in_reg_trdy_in), |
.pci_stop_in (in_reg_stop_in), |
.pci_devsel_in (in_reg_devsel_in), |
.pci_idsel_in (in_reg_idsel_in), |
.pci_ad_in (in_reg_ad_in), |
.pci_cbe_in (in_reg_cbe_in), |
|
.pci_gnt_reg_out (in_reg_gnt_out), |
.pci_frame_reg_out (in_reg_frame_out), |
.pci_irdy_reg_out (in_reg_irdy_out), |
.pci_trdy_reg_out (in_reg_trdy_out), |
.pci_stop_reg_out (in_reg_stop_out), |
.pci_devsel_reg_out (in_reg_devsel_out), |
.pci_idsel_reg_out (in_reg_idsel_out), |
.pci_ad_reg_out (in_reg_ad_out), |
.pci_cbe_reg_out (in_reg_cbe_out) |
); |
|
endmodule |
/verilog/pci_user_constants.v
0,0 → 1,238
////////////////////////////////////////////////////////////////////// |
//// //// |
//// File name "pci_user_constants.v" //// |
//// //// |
//// This file is part of the "PCI bridge" project //// |
//// http://www.opencores.org/cores/pci/ //// |
//// //// |
//// Author(s): //// |
//// - Miha Dolenc (mihad@opencores.org) //// |
//// - Tadej Markovic (tadej@opencores.org) //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2000 Miha Dolenc, mihad@opencores.org //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// |
// CVS Revision History |
// |
// $Log: not supported by cvs2svn $ |
// Revision 1.8 2003/03/14 15:31:57 mihad |
// Entered the option to disable no response counter in wb master. |
// |
// Revision 1.7 2003/01/27 17:05:50 mihad |
// Updated. |
// |
// Revision 1.6 2003/01/27 16:51:19 mihad |
// Old files with wrong names removed. |
// |
// Revision 1.5 2003/01/21 16:06:56 mihad |
// Bug fixes, testcases added. |
// |
// Revision 1.4 2002/09/30 17:22:45 mihad |
// Added support for Virtual Silicon two port RAM. Didn't run regression on it yet! |
// |
// Revision 1.3 2002/08/13 11:03:53 mihad |
// Added a few testcases. Repaired wrong reset value for PCI_AM5 register. Repaired Parity Error Detected bit setting. Changed PCI_AM0 to always enabled(regardles of PCI_AM0 define), if image 0 is used as configuration image |
// |
// Revision 1.2 2002/03/05 11:53:47 mihad |
// Added some testcases, removed un-needed fifo signals |
// |
// Revision 1.1 2002/02/01 14:43:31 mihad |
// *** empty log message *** |
// |
// |
|
// Fifo implementation defines: |
// If FPGA and XILINX are defined, Xilinx's BlockSelectRAM+ is instantiated for Fifo storage. |
// 16 bit width is used, so 8 bits of address ( 256 ) locations are available. If RAM_DONT_SHARE is not defined (commented out), |
// then one block RAM is shared between two FIFOs. That means each Fifo can have a maximum address length of 7 - depth of 128 and only 6 block rams are used |
// If RAM_DONT_SHARE is defined ( not commented out ), then 12 block RAMs are used and each Fifo can have a maximum address length of 8 ( 256 locations ) |
// If FPGA is not defined, then ASIC RAMs are used. Currently there is only one version of ARTISAN RAM supported. User should generate synchronous RAM with |
// width of 40 and instantiate it in pci_tpram.v. If RAM_DONT_SHARE is defined, then these can be dual port rams ( write port |
// in one clock domain, read in other ), otherwise it must be two port RAM ( read and write ports in both clock domains ). |
// If RAM_DONT_SHARE is defined, then all RAM address lengths must be specified accordingly, otherwise there are two relevant lengths - PCI_FIFO_RAM_ADDR_LENGTH and |
// WB_FIFO_RAM_ADDR_LENGTH. |
|
`define WBW_ADDR_LENGTH 4 |
`define WBR_ADDR_LENGTH 4 |
`define PCIW_ADDR_LENGTH 4 |
`define PCIR_ADDR_LENGTH 4 |
|
`define FPGA |
`define XILINX |
|
//`define WB_RAM_DONT_SHARE |
`define PCI_RAM_DONT_SHARE |
|
`ifdef FPGA |
`ifdef XILINX |
`define PCI_FIFO_RAM_ADDR_LENGTH 4 // PCI target unit fifo storage definition |
`define WB_FIFO_RAM_ADDR_LENGTH 8 // WB slave unit fifo storage definition |
//`define PCI_XILINX_RAMB4 |
`define WB_XILINX_RAMB4 |
`define PCI_XILINX_DIST_RAM |
//`define WB_XILINX_DIST_RAM |
`endif |
`else |
`define PCI_FIFO_RAM_ADDR_LENGTH 4 // PCI target unit fifo storage definition when RAM sharing is used ( both pcir and pciw fifo use same instance of RAM ) |
`define WB_FIFO_RAM_ADDR_LENGTH 7 // WB slave unit fifo storage definition when RAM sharing is used ( both wbr and wbw fifo use same instance of RAM ) |
// `define WB_ARTISAN_SDP |
// `define PCI_ARTISAN_SDP |
// `define PCI_VS_STP |
// `define WB_VS_STP |
`endif |
|
// these two defines allow user to select active high or low output enables on PCI bus signals, depending on |
// output buffers instantiated. Xilinx FPGAs use active low output enables. |
`define ACTIVE_LOW_OE |
//`define ACTIVE_HIGH_OE |
|
// HOST/GUEST implementation selection - see design document and specification for description of each implementation |
// only one can be defined at same time |
//`define HOST |
`define GUEST |
|
// if NO_CNF_IMAGE is commented out, then READ-ONLY access to configuration space is ENABLED: |
// - ENABLED Read-Only access from WISHBONE for GUEST bridges |
// - ENABLED Read-Only access from PCI for HOST bridges |
// with defining NO_CNF_IMAGE, one decoder and one multiplexer are saved |
`define NO_CNF_IMAGE |
|
// number defined here specifies how many MS bits in PCI address are compared with base address, to decode |
// accesses. Maximum number allows for minimum image size ( number = 20, image size = 4KB ), minimum number |
// allows for maximum image size ( number = 1, image size = 2GB ). If you intend on using different sizes of PCI images, |
// you have to define a number of minimum sized image and enlarge others by specifying different address mask. |
// smaller the number here, faster the decoder operation |
`define PCI_NUM_OF_DEC_ADDR_LINES 12 |
|
// no. of PCI Target IMAGES |
// - PCI provides 6 base address registers for image implementation. |
// PCI_IMAGE1 definition is not required and has no effect, since PCI image 1 is always implemented |
// If GUEST is defined, PCI Image 0 is also always implemented and is used for configuration space |
// access. |
// If HOST is defined and NO_CNF_IMAGE is not, then PCI Image 0 is used for Read Only access to configuration |
// space. If HOST is defined and NO_CNF_IMAGE is defined, then user can define PCI_IMAGE0 as normal image, and there |
// is no access to Configuration space possible from PCI bus. |
// Implementation of all other PCI images is selected by defining PCI_IMAGE2 through PCI_IMAGE5 regardles of HOST |
// or GUEST implementation. |
`ifdef HOST |
`ifdef NO_CNF_IMAGE |
`define PCI_IMAGE0 |
`endif |
`endif |
|
`define PCI_IMAGE2 |
//`define PCI_IMAGE3 |
//`define PCI_IMAGE4 |
//`define PCI_IMAGE5 |
|
// initial value for PCI image address masks. Address masks can be defined in enabled state, |
// to allow device independent software to detect size of image and map base addresses to |
// memory space. If initial mask for an image is defined as 0, then device independent software |
// won't detect base address implemented and device dependent software will have to configure |
// address masks as well as base addresses! |
`define PCI_AM0 20'hffff_f |
`define PCI_AM1 20'hffff_f |
`define PCI_AM2 20'hffff_8 |
`define PCI_AM3 20'hffff_0 |
`define PCI_AM4 20'hfffe_0 |
`define PCI_AM5 20'h0000_0 |
|
// initial value for PCI image maping to MEMORY or IO spaces. If initial define is set to 0, |
// then IMAGE with that base address points to MEMORY space, othervise it points ti IO space. D |
// Device independent software sets the base addresses acording to MEMORY or IO maping! |
`define PCI_BA0_MEM_IO 1'b0 // considered only when PCI_IMAGE0 is used as general PCI-WB image! |
`define PCI_BA1_MEM_IO 1'b0 |
`define PCI_BA2_MEM_IO 1'b0 |
`define PCI_BA3_MEM_IO 1'b1 |
`define PCI_BA4_MEM_IO 1'b0 |
`define PCI_BA5_MEM_IO 1'b1 |
|
// number defined here specifies how many MS bits in WB address are compared with base address, to decode |
// accesses. Maximum number allows for minimum image size ( number = 20, image size = 4KB ), minimum number |
// allows for maximum image size ( number = 1, image size = 2GB ). If you intend on using different sizes of WB images, |
// you have to define a number of minimum sized image and enlarge others by specifying different address mask. |
// smaller the number here, faster the decoder operation |
`define WB_NUM_OF_DEC_ADDR_LINES 1 |
|
// no. of WISHBONE Slave IMAGES |
// WB image 0 is always used for access to configuration space. In case configuration space access is not implemented, |
// ( both GUEST and NO_CNF_IMAGE defined ), then WB image 0 is not implemented. User doesn't need to define image 0. |
// WB Image 1 is always implemented and user doesnt need to specify its definition |
// WB images' 2 through 5 implementation by defining each one. |
`define WB_IMAGE2 |
//`define WB_IMAGE3 |
//`define WB_IMAGE4 |
//`define WB_IMAGE5 |
|
// If this define is commented out, then address translation will not be implemented. |
// addresses will pass through bridge unchanged, regardles of address translation enable bits. |
// Address translation also slows down the decoding |
`define ADDR_TRAN_IMPL |
|
// decode speed for WISHBONE definition - initial cycle on WISHBONE bus will take 1 WS for FAST, 2 WSs for MEDIUM and 3 WSs for slow. |
// slower decode speed can be used, to provide enough time for address to be decoded. |
`define WB_DECODE_FAST |
//`define WB_DECODE_MEDIUM |
//`define WB_DECODE_SLOW |
|
// Base address for Configuration space access from WB bus. This value cannot be changed during runtime |
`define WB_CONFIGURATION_BASE 20'hF300_0 |
|
// Turn registered WISHBONE slave outputs on or off |
// all outputs from WB Slave state machine are registered, if this is defined - WB bus outputs as well as |
// outputs to internals of the core. |
//`define REGISTER_WBS_OUTPUTS |
|
/*----------------------------------------------------------------------------------------------------------- |
Core speed definition - used for simulation and 66MHz Capable bit value in status register indicating 66MHz |
capable device |
-----------------------------------------------------------------------------------------------------------*/ |
`define PCI33 |
//`define PCI66 |
|
/*----------------------------------------------------------------------------------------------------------- |
[000h-00Ch] First 4 DWORDs (32-bit) of PCI configuration header - the same regardless of the HEADER type ! |
Vendor_ID is an ID for a specific vendor defined by PCI_SIG - 2321h does not belong to anyone (e.g. |
Xilinx's Vendor_ID is 10EEh and Altera's Vendor_ID is 1172h). Device_ID and Revision_ID should be used |
together by application. |
-----------------------------------------------------------------------------------------------------------*/ |
`define HEADER_VENDOR_ID 16'h1895 |
`define HEADER_DEVICE_ID 16'h0001 |
`define HEADER_REVISION_ID 8'h01 |
|
// Turn registered WISHBONE master outputs on or off |
// all outputs from WB Master state machine are registered, if this is defined - WB bus outputs as well as |
// outputs to internals of the core. |
`define REGISTER_WBM_OUTPUTS |
|
// MAX Retry counter value for WISHBONE Master state-machine |
// This value is 8-bit because of 8-bit retry counter !!! |
`define WB_RTY_CNT_MAX 8'hff |
|
// define the macro below to disable internal retry generation in the wishbone master interface |
// used when wb master accesses extremly slow devices. |
//`define PCI_WBM_NO_RESPONSE_CNT_DISABLE |
verilog/pci_user_constants.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: verilog/pci_test_top_1clk.v
===================================================================
--- verilog/pci_test_top_1clk.v (nonexistent)
+++ verilog/pci_test_top_1clk.v (revision 154)
@@ -0,0 +1,461 @@
+module pci_test_top
+(
+ pci_clk_pad_i,
+ pci_rst_pad_i,
+
+ pci_req_pad_o,
+ pci_gnt_pad_i,
+ pci_idsel_pad_i,
+
+ pci_ad0_pad_io,
+ pci_ad1_pad_io,
+ pci_ad2_pad_io,
+ pci_ad3_pad_io,
+ pci_ad4_pad_io,
+ pci_ad5_pad_io,
+ pci_ad6_pad_io,
+ pci_ad7_pad_io,
+ pci_ad8_pad_io,
+ pci_ad9_pad_io,
+ pci_ad10_pad_io,
+ pci_ad11_pad_io,
+ pci_ad12_pad_io,
+ pci_ad13_pad_io,
+ pci_ad14_pad_io,
+ pci_ad15_pad_io,
+ pci_ad16_pad_io,
+ pci_ad17_pad_io,
+ pci_ad18_pad_io,
+ pci_ad19_pad_io,
+ pci_ad20_pad_io,
+ pci_ad21_pad_io,
+ pci_ad22_pad_io,
+ pci_ad23_pad_io,
+ pci_ad24_pad_io,
+ pci_ad25_pad_io,
+ pci_ad26_pad_io,
+ pci_ad27_pad_io,
+ pci_ad28_pad_io,
+ pci_ad29_pad_io,
+ pci_ad30_pad_io,
+ pci_ad31_pad_io,
+
+ pci_cbe0_pad_io,
+ pci_cbe1_pad_io,
+ pci_cbe2_pad_io,
+ pci_cbe3_pad_io,
+
+ pci_frame_pad_io,
+ pci_irdy_pad_io,
+ pci_devsel_pad_io,
+ pci_trdy_pad_io,
+ pci_stop_pad_io,
+ pci_par_pad_io,
+ pci_perr_pad_io,
+ pci_serr_pad_o
+);
+
+// input/output inout declarations
+input pci_clk_pad_i,
+ pci_rst_pad_i ;
+
+output pci_req_pad_o, pci_serr_pad_o ;
+input pci_gnt_pad_i,
+ pci_idsel_pad_i ;
+
+inout pci_frame_pad_io,
+ pci_irdy_pad_io,
+ pci_devsel_pad_io,
+ pci_trdy_pad_io,
+ pci_stop_pad_io,
+ pci_par_pad_io,
+ pci_perr_pad_io,
+ pci_ad0_pad_io,
+ pci_ad1_pad_io,
+ pci_ad2_pad_io,
+ pci_ad3_pad_io,
+ pci_ad4_pad_io,
+ pci_ad5_pad_io,
+ pci_ad6_pad_io,
+ pci_ad7_pad_io,
+ pci_ad8_pad_io,
+ pci_ad9_pad_io,
+ pci_ad10_pad_io,
+ pci_ad11_pad_io,
+ pci_ad12_pad_io,
+ pci_ad13_pad_io,
+ pci_ad14_pad_io,
+ pci_ad15_pad_io,
+ pci_ad16_pad_io,
+ pci_ad17_pad_io,
+ pci_ad18_pad_io,
+ pci_ad19_pad_io,
+ pci_ad20_pad_io,
+ pci_ad21_pad_io,
+ pci_ad22_pad_io,
+ pci_ad23_pad_io,
+ pci_ad24_pad_io,
+ pci_ad25_pad_io,
+ pci_ad26_pad_io,
+ pci_ad27_pad_io,
+ pci_ad28_pad_io,
+ pci_ad29_pad_io,
+ pci_ad30_pad_io,
+ pci_ad31_pad_io,
+ pci_cbe0_pad_io,
+ pci_cbe1_pad_io,
+ pci_cbe2_pad_io,
+ pci_cbe3_pad_io ;
+
+// wires for test master to pci slave connections
+wire wbm_test_wbs_pci_cyc,
+ wbm_test_wbs_pci_stb,
+ wbm_test_wbs_pci_cab,
+ wbm_test_wbs_pci_we,
+ wbs_pci_wbm_test_ack ;
+
+wire [31:0] wbm_test_wbs_pci_adr,
+ wbm_test_wbs_pci_dat,
+ wbs_pci_wbm_test_dat ;
+
+wire [3:0] wbm_test_wbs_pci_sel ;
+
+// wires for test slave to pci master connections
+wire wbm_pci_wbs_test_cyc,
+ wbm_pci_wbs_test_stb,
+ wbm_pci_wbs_test_cab,
+ wbm_pci_wbs_test_we,
+ wbs_test_wbm_pci_ack ;
+
+wire [31:0] wbm_pci_wbs_test_adr,
+ wbm_pci_wbs_test_dat,
+ wbs_test_wbm_pci_dat ;
+
+wire [3:0] wbm_pci_wbs_test_sel ;
+
+wire wb_rst ;
+
+wire wb_clk = pci_clk_pad_i;
+
+// prevent concurent accesses through pci bridge master and slave interfaces
+reg test_wbs_cyc ;
+reg pci_wbs_cyc ;
+
+always@(posedge wb_clk or posedge wb_rst)
+begin
+ if (wb_rst)
+ begin
+ test_wbs_cyc <= 1'b0 ;
+ pci_wbs_cyc <= 1'b0 ;
+ end
+ else
+ begin
+ if (~pci_wbs_cyc & ~test_wbs_cyc)
+ begin
+ // currently no cyc signal is asserted - the pci bridge wb master will have the priority here, so check if it has cycle asserted!
+ if (wbm_pci_wbs_test_cyc)
+ test_wbs_cyc <= 1'b1 ;
+ else // no cycle is asserted and pci wb master is not starting the transaction - test wb master can start
+ pci_wbs_cyc <= wbm_test_wbs_pci_cyc ;
+ end
+ else
+ begin
+ // at least one of the cycles is asserted - wait for transaction to finish
+ if (test_wbs_cyc)
+ test_wbs_cyc <= wbm_pci_wbs_test_cyc ;
+
+ if (pci_wbs_cyc)
+ pci_wbs_cyc <= wbm_test_wbs_pci_cyc ;
+ end
+ end
+end
+
+reg pci_irdy_reg,
+ pci_irdy_en_reg ;
+
+wire pci_trdy_reg = i_pci_bridge32.input_register.pci_trdy_reg_out ;
+
+always@(posedge pci_clk_pad_i or negedge pci_rst_pad_i)
+begin
+ if (~pci_rst_pad_i)
+ begin
+ pci_irdy_reg <= 1'b1 ;
+ pci_irdy_en_reg <= 1'b0 ;
+ end
+ else
+ pci_irdy_reg <= i_pci_bridge32.output_backup.irdy_out ;
+ pci_irdy_en_reg <= i_pci_bridge32.output_backup.irdy_en_out ;
+ end
+end
+
+test i_test
+(
+ .clk_i (wb_clk),
+ .rst_i (wb_rst),
+
+ .wbm_cyc_o (wbm_test_wbs_pci_cyc),
+ .wbm_stb_o (wbm_test_wbs_pci_stb),
+ .wbm_cab_o (wbm_test_wbs_pci_cab),
+ .wbm_we_o (wbm_test_wbs_pci_we),
+ .wbm_adr_o (wbm_test_wbs_pci_adr),
+ .wbm_sel_o (wbm_test_wbs_pci_sel),
+ .wbm_dat_o (wbm_test_wbs_pci_dat),
+ .wbm_dat_i (wbs_pci_wbm_test_dat),
+ .wbm_ack_i (wbs_pci_wbm_test_ack),
+ .wbm_rty_i (1'b0),
+ .wbm_err_i (1'b0),
+
+ .wbs_cyc_i (test_wbs_cyc),
+ .wbs_stb_i (wbm_pci_wbs_test_stb),
+ .wbs_cab_i (wbm_pci_wbs_test_cab),
+ .wbs_we_i (wbm_pci_wbs_test_we),
+ .wbs_adr_i (wbm_pci_wbs_test_adr),
+ .wbs_sel_i (wbm_pci_wbs_test_sel),
+ .wbs_dat_i (wbm_pci_wbs_test_dat),
+ .wbs_dat_o (wbs_test_wbm_pci_dat),
+ .wbs_ack_o (wbs_test_wbm_pci_ack),
+ .wbs_rty_o (),
+ .wbs_err_o (),
+
+ .pci_irdy_reg_i (pci_irdy_reg),
+ .pci_irdy_en_reg_i (pci_irdy_en_reg),
+ .pci_trdy_reg_i (pci_trdy_reg)
+);
+
+wire pci_req_o,
+ pci_req_oe,
+ pci_frame_i,
+ pci_frame_o,
+ pci_frame_oe,
+ pci_irdy_oe,
+ pci_devsel_oe,
+ pci_trdy_oe,
+ pci_stop_oe,
+ pci_irdy_i,
+ pci_irdy_o,
+ pci_devsel_i,
+ pci_devsel_o,
+ pci_trdy_i,
+ pci_trdy_o,
+ pci_stop_i,
+ pci_stop_o,
+ pci_par_i,
+ pci_par_o,
+ pci_par_oe,
+ pci_perr_i,
+ pci_perr_o,
+ pci_perr_oe,
+ pci_serr_o,
+ pci_serr_oe
+;
+
+wire [31:0] pci_ad_oe,
+ pci_ad_i,
+ pci_ad_o ;
+
+wire [3:0] pci_cbe_oe,
+ pci_cbe_i,
+ pci_cbe_o ;
+
+bufif0 ad_buffer00 (pci_ad0_pad_io , pci_ad_o[0] , pci_ad_oe[0] ) ;
+bufif0 ad_buffer01 (pci_ad1_pad_io , pci_ad_o[1] , pci_ad_oe[1] ) ;
+bufif0 ad_buffer02 (pci_ad2_pad_io , pci_ad_o[2] , pci_ad_oe[2] ) ;
+bufif0 ad_buffer03 (pci_ad3_pad_io , pci_ad_o[3] , pci_ad_oe[3] ) ;
+bufif0 ad_buffer04 (pci_ad4_pad_io , pci_ad_o[4] , pci_ad_oe[4] ) ;
+bufif0 ad_buffer05 (pci_ad5_pad_io , pci_ad_o[5] , pci_ad_oe[5] ) ;
+bufif0 ad_buffer06 (pci_ad6_pad_io , pci_ad_o[6] , pci_ad_oe[6] ) ;
+bufif0 ad_buffer07 (pci_ad7_pad_io , pci_ad_o[7] , pci_ad_oe[7] ) ;
+bufif0 ad_buffer08 (pci_ad8_pad_io , pci_ad_o[8] , pci_ad_oe[8] ) ;
+bufif0 ad_buffer09 (pci_ad9_pad_io , pci_ad_o[9] , pci_ad_oe[9] ) ;
+bufif0 ad_buffer10 (pci_ad10_pad_io, pci_ad_o[10], pci_ad_oe[10]) ;
+bufif0 ad_buffer11 (pci_ad11_pad_io, pci_ad_o[11], pci_ad_oe[11]) ;
+bufif0 ad_buffer12 (pci_ad12_pad_io, pci_ad_o[12], pci_ad_oe[12]) ;
+bufif0 ad_buffer13 (pci_ad13_pad_io, pci_ad_o[13], pci_ad_oe[13]) ;
+bufif0 ad_buffer14 (pci_ad14_pad_io, pci_ad_o[14], pci_ad_oe[14]) ;
+bufif0 ad_buffer15 (pci_ad15_pad_io, pci_ad_o[15], pci_ad_oe[15]) ;
+bufif0 ad_buffer16 (pci_ad16_pad_io, pci_ad_o[16], pci_ad_oe[16]) ;
+bufif0 ad_buffer17 (pci_ad17_pad_io, pci_ad_o[17], pci_ad_oe[17]) ;
+bufif0 ad_buffer18 (pci_ad18_pad_io, pci_ad_o[18], pci_ad_oe[18]) ;
+bufif0 ad_buffer19 (pci_ad19_pad_io, pci_ad_o[19], pci_ad_oe[19]) ;
+bufif0 ad_buffer20 (pci_ad20_pad_io, pci_ad_o[20], pci_ad_oe[20]) ;
+bufif0 ad_buffer21 (pci_ad21_pad_io, pci_ad_o[21], pci_ad_oe[21]) ;
+bufif0 ad_buffer22 (pci_ad22_pad_io, pci_ad_o[22], pci_ad_oe[22]) ;
+bufif0 ad_buffer23 (pci_ad23_pad_io, pci_ad_o[23], pci_ad_oe[23]) ;
+bufif0 ad_buffer24 (pci_ad24_pad_io, pci_ad_o[24], pci_ad_oe[24]) ;
+bufif0 ad_buffer25 (pci_ad25_pad_io, pci_ad_o[25], pci_ad_oe[25]) ;
+bufif0 ad_buffer26 (pci_ad26_pad_io, pci_ad_o[26], pci_ad_oe[26]) ;
+bufif0 ad_buffer27 (pci_ad27_pad_io, pci_ad_o[27], pci_ad_oe[27]) ;
+bufif0 ad_buffer28 (pci_ad28_pad_io, pci_ad_o[28], pci_ad_oe[28]) ;
+bufif0 ad_buffer29 (pci_ad29_pad_io, pci_ad_o[29], pci_ad_oe[29]) ;
+bufif0 ad_buffer30 (pci_ad30_pad_io, pci_ad_o[30], pci_ad_oe[30]) ;
+bufif0 ad_buffer31 (pci_ad31_pad_io, pci_ad_o[31], pci_ad_oe[31]) ;
+
+bufif0 cbe_buffer0 (pci_cbe0_pad_io, pci_cbe_o[0], pci_cbe_oe[0]) ;
+bufif0 cbe_buffer1 (pci_cbe1_pad_io, pci_cbe_o[1], pci_cbe_oe[1]) ;
+bufif0 cbe_buffer2 (pci_cbe2_pad_io, pci_cbe_o[2], pci_cbe_oe[2]) ;
+bufif0 cbe_buffer3 (pci_cbe3_pad_io, pci_cbe_o[3], pci_cbe_oe[3]) ;
+
+assign pci_ad_i = {
+ pci_ad31_pad_io,
+ pci_ad30_pad_io,
+ pci_ad29_pad_io,
+ pci_ad28_pad_io,
+ pci_ad27_pad_io,
+ pci_ad26_pad_io,
+ pci_ad25_pad_io,
+ pci_ad24_pad_io,
+ pci_ad23_pad_io,
+ pci_ad22_pad_io,
+ pci_ad21_pad_io,
+ pci_ad20_pad_io,
+ pci_ad19_pad_io,
+ pci_ad18_pad_io,
+ pci_ad17_pad_io,
+ pci_ad16_pad_io,
+ pci_ad15_pad_io,
+ pci_ad14_pad_io,
+ pci_ad13_pad_io,
+ pci_ad12_pad_io,
+ pci_ad11_pad_io,
+ pci_ad10_pad_io,
+ pci_ad9_pad_io,
+ pci_ad8_pad_io,
+ pci_ad7_pad_io,
+ pci_ad6_pad_io,
+ pci_ad5_pad_io,
+ pci_ad4_pad_io,
+ pci_ad3_pad_io,
+ pci_ad2_pad_io,
+ pci_ad1_pad_io,
+ pci_ad0_pad_io
+} ;
+
+assign pci_cbe_i = {
+ pci_cbe3_pad_io,
+ pci_cbe2_pad_io,
+ pci_cbe1_pad_io,
+ pci_cbe0_pad_io
+} ;
+
+bufif0 req_buf (pci_req_pad_o, pci_req_o, pci_req_oe) ;
+
+bufif0 frame_buf (pci_frame_pad_io, pci_frame_o, pci_frame_oe) ;
+assign pci_frame_i = pci_frame_pad_io ;
+
+bufif0 irdy_buf (pci_irdy_pad_io, pci_irdy_o, pci_irdy_oe) ;
+assign pci_irdy_i = pci_irdy_pad_io ;
+
+bufif0 devsel_buf (pci_devsel_pad_io, pci_devsel_o, pci_devsel_oe) ;
+assign pci_devsel_i = pci_devsel_pad_io ;
+
+bufif0 trdy_buf (pci_trdy_pad_io, pci_trdy_o, pci_trdy_oe) ;
+assign pci_trdy_i = pci_trdy_pad_io ;
+
+bufif0 stop_buf (pci_stop_pad_io, pci_stop_o, pci_stop_oe) ;
+assign pci_stop_i = pci_stop_pad_io ;
+
+bufif0 par_buf (pci_par_pad_io, pci_par_o, pci_par_oe) ;
+assign pci_par_i = pci_par_pad_io ;
+
+bufif0 perr_buf (pci_perr_pad_io, pci_perr_o, pci_perr_oe) ;
+assign pci_perr_i = pci_perr_pad_io ;
+
+bufif0 serr_buf (pci_serr_pad_o, pci_serr_o, pci_serr_oe) ;
+
+pci_bridge32 i_pci_bridge32
+(
+ // WISHBONE system signals
+ .wb_clk_i(wb_clk),
+ .wb_rst_i(1'b0),
+ .wb_rst_o(wb_rst),
+ .wb_int_i(1'b0),
+ .wb_int_o(),
+
+ // WISHBONE slave interface
+ .wbs_adr_i(wbm_test_wbs_pci_adr),
+ .wbs_dat_i(wbm_test_wbs_pci_dat),
+ .wbs_dat_o(wbs_pci_wbm_test_dat),
+ .wbs_sel_i(wbm_test_wbs_pci_sel),
+ .wbs_cyc_i(pci_wbs_cyc),
+ .wbs_stb_i(wbm_test_wbs_pci_stb),
+ .wbs_we_i (wbm_test_wbs_pci_we),
+ .wbs_cab_i(wbm_test_wbs_pci_cab),
+ .wbs_ack_o(wbs_pci_wbm_test_ack),
+ .wbs_rty_o(),
+ .wbs_err_o(),
+
+ // WISHBONE master interface
+ .wbm_adr_o(wbm_pci_wbs_test_adr),
+ .wbm_dat_i(wbs_test_wbm_pci_dat),
+ .wbm_dat_o(wbm_pci_wbs_test_dat),
+ .wbm_sel_o(wbm_pci_wbs_test_sel),
+ .wbm_cyc_o(wbm_pci_wbs_test_cyc),
+ .wbm_stb_o(wbm_pci_wbs_test_stb),
+ .wbm_we_o (wbm_pci_wbs_test_we),
+ .wbm_cab_o(wbm_pci_wbs_test_cab),
+ .wbm_ack_i(wbs_test_wbm_pci_ack),
+ .wbm_rty_i(1'b0),
+ .wbm_err_i(1'b0),
+
+ // pci interface - system pins
+ .pci_clk_i (pci_clk_pad_i),
+ .pci_rst_i (pci_rst_pad_i),
+ .pci_rst_o (),
+ .pci_inta_i (1'b1),
+ .pci_inta_o (),
+ .pci_rst_oe_o (),
+ .pci_inta_oe_o (),
+
+ // arbitration pins
+ .pci_req_o (pci_req_o),
+ .pci_req_oe_o (pci_req_oe),
+
+ .pci_gnt_i (pci_gnt_pad_i),
+
+ // protocol pins
+ .pci_frame_i (pci_frame_i),
+ .pci_frame_o (pci_frame_o),
+
+ .pci_frame_oe_o (pci_frame_oe),
+ .pci_irdy_oe_o (pci_irdy_oe),
+ .pci_devsel_oe_o(pci_devsel_oe),
+ .pci_trdy_oe_o (pci_trdy_oe),
+ .pci_stop_oe_o (pci_stop_oe),
+ .pci_ad_oe_o (pci_ad_oe),
+ .pci_cbe_oe_o (pci_cbe_oe),
+
+ .pci_irdy_i (pci_irdy_i),
+ .pci_irdy_o (pci_irdy_o),
+
+ .pci_idsel_i (pci_idsel_pad_i),
+
+ .pci_devsel_i (pci_devsel_i),
+ .pci_devsel_o (pci_devsel_o),
+
+ .pci_trdy_i (pci_trdy_i),
+ .pci_trdy_o (pci_trdy_o),
+
+ .pci_stop_i (pci_stop_i),
+ .pci_stop_o (pci_stop_o),
+
+ // data transfer pins
+ .pci_ad_i (pci_ad_i),
+ .pci_ad_o (pci_ad_o),
+
+ .pci_cbe_i (pci_cbe_i),
+ .pci_cbe_o (pci_cbe_o),
+
+ // parity generation and checking pins
+ .pci_par_i (pci_par_i),
+ .pci_par_o (pci_par_o),
+ .pci_par_oe_o (pci_par_oe),
+
+ .pci_perr_i (pci_perr_i),
+ .pci_perr_o (pci_perr_o),
+ .pci_perr_oe_o (pci_perr_oe),
+
+ // system error pin
+ .pci_serr_o (pci_serr_o),
+ .pci_serr_oe_o (pci_serr_oe)
+);
+endmodule // pci_test_top
verilog/pci_test_top_1clk.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property