Beruflich Dokumente
Kultur Dokumente
inout
input
input
input
input
input
input
output
output
[31:0]AD_BUS,
[3:0] C_BE,
clk,
reset,
IDSEL,
FRAME,
IRDY,
TRDY,
DEVSEL);
//Global variables
reg [ 5:0] reg_num;
reg [ 2:0] func_num;
reg [ 4:0] dev_num;
reg [ 7:0] bus_num;
reg [20:0] IDSEL_31_11;
reg [31:0] addr_in, data;
reg [ 3:0] cmd, byte_en;
wire [31:0] addr_out = {IDSEL_31_11,addr_in[10:0]};
wire [ 1:0]config_type = addr_in[1:0];
assign DEVSEL = (data == 32'h0000_FFFF) ? 1'b1 : 1'b0;
always @(posedge clk or negedge reset) begin
if(~reset) begin
data <= 'h0;
end
else if(~FRAME && IRDY) begin
addr_in <= AD_BUS;
cmd <= C_BE;
$display("ADDRESS IS %d, COMMAND is %d, DEVSEL is ", addr_in, cmd, DEVSEL
);
end
else begin
data
<= AD_BUS;
byte_en <= C_BE;
$display("DATA IS %d, BE is %d", data, byte_en);
end
end
always @(*) begin
for(bus_num = 0; bus_num <= 8'hFF; bus_num = bus_num+1) begin
for(dev_num = 0; dev_num <= 5'h1F; dev_num = dev_num+1 ) begin
for(func_num = 0; func_num <= 3'd7; func_num = func_num+1) begin
if(~cmd[0]) begin
$display("ADDRESS OUT IS %d, ", addr_out);
pci_read(addr_out, data);
end
else begin
$display("ADDRESS OUT IS %d, ", addr_out);
pci_write(addr_out, data, byte_en);
end
end
end
end
end