mirror of
https://github.com/marqs85/ossc.git
synced 2024-12-12 19:29:11 +00:00
update epcq_controller_mod to epcq_controller2
This commit is contained in:
parent
2a24eb8dd7
commit
238cf0b285
@ -1,611 +0,0 @@
|
||||
// (C) 2001-2015 Altera Corporation. All rights reserved.
|
||||
// Your use of Altera Corporation's design tools, logic functions and other
|
||||
// software and tools, and its AMPP partner logic functions, and any output
|
||||
// files any of the foregoing (including device programming or simulation
|
||||
// files), and any associated documentation or information are expressly subject
|
||||
// to the terms and conditions of the Altera Program License Subscription
|
||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
// license agreement, including, without limitation, that your use is for the
|
||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
// Altera or its authorized distributors. Please refer to the applicable
|
||||
// agreement for further details.
|
||||
|
||||
|
||||
// (C) 2001-2015 Altera Corporation. All rights reserved.
|
||||
// Your use of Altera Corporation's design tools, logic functions and other
|
||||
// software and tools, and its AMPP partner logic functions, and any output
|
||||
// files any of the foregoing (including device programming or simulation
|
||||
// files), and any associated documentation or information are expressly subject
|
||||
// to the terms and conditions of the Altera Program License Subscription
|
||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
// license agreement, including, without limitation, that your use is for the
|
||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
// Altera or its authorized distributors. Please refer to the applicable
|
||||
// agreement for further details.
|
||||
|
||||
|
||||
|
||||
`timescale 1ps / 1ps
|
||||
|
||||
module altera_epcq_controller #(
|
||||
parameter CS_WIDTH = 1,
|
||||
parameter ENABLE_4BYTE_ADDR = 1,
|
||||
parameter ADDR_WIDTH = 22,
|
||||
parameter ASI_WIDTH = 1,
|
||||
parameter DEVICE_FAMILY = "CYCLONE V",
|
||||
parameter ASMI_ADDR_WIDTH = 22,
|
||||
parameter CHIP_SELS = 1
|
||||
)(
|
||||
input wire clk,
|
||||
input wire reset_n,
|
||||
|
||||
// ports to access csr
|
||||
input wire avl_csr_write,
|
||||
input wire avl_csr_read,
|
||||
input wire [2:0] avl_csr_addr,
|
||||
input wire [31:0] avl_csr_wrdata,
|
||||
output reg [31:0] avl_csr_rddata,
|
||||
output reg avl_csr_rddata_valid,
|
||||
output reg avl_csr_waitrequest,
|
||||
|
||||
// ports to access memory
|
||||
input wire avl_mem_write,
|
||||
input wire avl_mem_read,
|
||||
input wire [ADDR_WIDTH-1:0] avl_mem_addr,
|
||||
input wire [31:0] avl_mem_wrdata,
|
||||
input wire [3:0] avl_mem_byteenable,
|
||||
input wire [6:0] avl_mem_burstcount,
|
||||
output wire [31:0] avl_mem_rddata,
|
||||
output reg avl_mem_rddata_valid,
|
||||
output reg avl_mem_waitrequest,
|
||||
|
||||
// interrupt signal
|
||||
output reg irq,
|
||||
|
||||
// Disable dedicated active serial interface
|
||||
input wire [ASI_WIDTH-1:0] epcq_dataout,
|
||||
output reg epcq_dclk,
|
||||
output reg [CS_WIDTH-1:0] epcq_scein,
|
||||
output reg [ASI_WIDTH-1:0] epcq_sdoin,
|
||||
output reg [ASI_WIDTH-1:0] epcq_dataoe,
|
||||
|
||||
// ASMI PARALLEL interface
|
||||
input wire [ASI_WIDTH-1:0] ddasi_dataoe,
|
||||
output reg [ASI_WIDTH-1:0] ddasi_dataout,
|
||||
input wire ddasi_dclk,
|
||||
input wire [CS_WIDTH-1:0] ddasi_scein,
|
||||
input reg [ASI_WIDTH-1:0] ddasi_sdoin,
|
||||
|
||||
input wire asmi_busy,
|
||||
input wire asmi_data_valid,
|
||||
input wire [7:0] asmi_dataout,
|
||||
output reg asmi_clkin,
|
||||
output reg asmi_reset,
|
||||
output reg [CS_WIDTH-1:0] asmi_sce,
|
||||
output reg [ASMI_ADDR_WIDTH-1:0] asmi_addr,
|
||||
output reg [7:0] asmi_datain,
|
||||
output reg asmi_fast_read,
|
||||
output wire asmi_rden,
|
||||
output reg asmi_shift_bytes,
|
||||
output reg asmi_en4b_addr,
|
||||
output wire asmi_wren,
|
||||
output reg asmi_write,
|
||||
|
||||
input wire asmi_illegal_erase,
|
||||
input wire asmi_illegal_write,
|
||||
input wire [7:0] asmi_rdid_out,
|
||||
input wire [7:0] asmi_status_out,
|
||||
input wire [7:0] asmi_epcs_id,
|
||||
output reg asmi_read_rdid,
|
||||
output reg asmi_read_status,
|
||||
output reg asmi_read_sid,
|
||||
output reg asmi_bulk_erase,
|
||||
output reg asmi_sector_erase,
|
||||
output reg asmi_sector_protect
|
||||
);
|
||||
localparam LOCAL_ADDR_WIDTH = ADDR_WIDTH+2;
|
||||
localparam CSR_DATA_WIDTH = 32;
|
||||
localparam LAST_ADDR_BIT = (ASMI_ADDR_WIDTH == 24) ? 15 :
|
||||
(ASMI_ADDR_WIDTH == 32) ? 23 : 15;
|
||||
|
||||
reg [8:0] wr_burstcount_cnt, rd_burstcount_cnt;
|
||||
reg [8:0] rd_mem_burstcount, wr_mem_burstcount;
|
||||
|
||||
wire last_wr_byte;
|
||||
wire access_csr_status, access_csr_sid, access_csr_rdid, access_csr_mem_op, access_isr, access_imr, access_sce;
|
||||
wire read_status_combi, read_sid_combi, read_rdid_combi, read_isr_combi, read_imr_combi, write_isr_combi, write_imr_combi, write_sce_combi;
|
||||
wire bulk_erase_combi, sector_erase_combi, sector_protect_combi;
|
||||
wire wren_combi, illegal_write_combi, illegal_erase_combi;
|
||||
wire m_illegal_write_combi, m_illegal_erase_combi;
|
||||
wire read_mem_combi, write_mem_combi;
|
||||
wire data_valid_combi, pending_wr_data;
|
||||
wire detect_addroffset;
|
||||
wire [8:0] wfifo_data_in_0, wfifo_data_in_1, wfifo_data_in_2, wfifo_data_in_3;
|
||||
wire [ADDR_WIDTH-1:0] temp_mem_addr;
|
||||
|
||||
reg reset_n_reg;
|
||||
reg wr_mem_waitrequest, local_waitrequest;
|
||||
reg illegal_write_reg, illegal_erase_reg, m_illegal_write_reg, m_illegal_erase_reg;
|
||||
reg read_status_valid, read_sid_valid, read_rdid_valid, read_isr_valid, read_imr_valid;
|
||||
reg read_status_en, read_sid_en, read_rdid_en;
|
||||
reg wren_internal;
|
||||
reg [LOCAL_ADDR_WIDTH-1:0] wr_mem_addr;
|
||||
reg [7:0] rd_data_reg [4];
|
||||
reg [3:0][8:0] wr_data_reg;
|
||||
reg [1:0] rd_cnt;
|
||||
reg [1:0] wr_cnt;
|
||||
reg [3:0] wr_data_reg_full;
|
||||
reg detect_addroffset_reg, asmi_busy_reg;
|
||||
reg [2:0] temp_sce;
|
||||
|
||||
// Direct connection
|
||||
assign asmi_clkin = clk;
|
||||
assign asmi_reset = ~reset_n;
|
||||
assign ddasi_dataout = epcq_dataout;
|
||||
assign epcq_dclk = ddasi_dclk;
|
||||
assign epcq_scein = ddasi_scein;
|
||||
assign epcq_sdoin = ddasi_sdoin;
|
||||
assign epcq_dataoe = ddasi_dataoe;
|
||||
|
||||
// chip select
|
||||
generate if (DEVICE_FAMILY == "Arria 10") begin
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
asmi_sce <= {CS_WIDTH{1'b0}};
|
||||
end
|
||||
// to pack the address space this is needed
|
||||
else if (write_mem_combi || read_mem_combi) begin
|
||||
if (CHIP_SELS == 1 )
|
||||
asmi_sce <= 3'b001;
|
||||
else if (CHIP_SELS == 2 && avl_mem_addr[ADDR_WIDTH-1] == 0)
|
||||
asmi_sce <= 3'b001;
|
||||
else if (CHIP_SELS == 2 && avl_mem_addr[ADDR_WIDTH-1] == 1)
|
||||
asmi_sce <= 3'b010;
|
||||
else if (CHIP_SELS == 3 && avl_mem_addr[ADDR_WIDTH-1] == 1)
|
||||
asmi_sce <= 3'b100;
|
||||
else if (CHIP_SELS == 3 && avl_mem_addr[ADDR_WIDTH-1:ADDR_WIDTH-2] == 0)
|
||||
asmi_sce <= 3'b001;
|
||||
else if (CHIP_SELS == 3 && avl_mem_addr[ADDR_WIDTH-1:ADDR_WIDTH-2] == 1)
|
||||
asmi_sce <= 3'b010;
|
||||
else
|
||||
asmi_sce <= {CS_WIDTH{1'b0}};
|
||||
end
|
||||
else if (write_sce_combi) begin
|
||||
asmi_sce <= avl_csr_wrdata[2:0];
|
||||
end
|
||||
else if (asmi_en4b_addr) begin
|
||||
asmi_sce <= temp_sce;
|
||||
end
|
||||
end
|
||||
// decoder ring if the CHIP_SEL is only 1 then avalon address is the temp address
|
||||
// if the chipsele is 2 then need to remove top address bit
|
||||
// if the chipelect is 3 then remove the top 2 address bits.
|
||||
assign temp_mem_addr = CHIP_SELS == 1 ? avl_mem_addr:( CHIP_SELS == 2 ? {1'b0,avl_mem_addr[ADDR_WIDTH-2:0]}:{2'b00,avl_mem_addr[ADDR_WIDTH-3:0]});
|
||||
end
|
||||
else begin
|
||||
always @(posedge clk) begin
|
||||
asmi_sce <= {CS_WIDTH{1'b0}};
|
||||
end
|
||||
assign temp_mem_addr = avl_mem_addr;
|
||||
end
|
||||
endgenerate
|
||||
|
||||
// wait_request generation logic
|
||||
assign avl_mem_waitrequest = (asmi_busy || asmi_busy_reg) ? 1'b1 : (local_waitrequest || wr_mem_waitrequest);
|
||||
assign avl_csr_waitrequest = (asmi_busy || asmi_busy_reg) ? 1'b1 : (local_waitrequest || wr_mem_waitrequest);
|
||||
|
||||
// access CSR decoding logic
|
||||
assign access_csr_status = (avl_csr_addr == 3'b000);
|
||||
assign access_csr_sid = (avl_csr_addr == 3'b001);
|
||||
assign access_csr_rdid = (avl_csr_addr == 3'b010);
|
||||
assign access_csr_mem_op = (avl_csr_addr == 3'b011);
|
||||
assign access_isr = (avl_csr_addr == 3'b100);
|
||||
assign access_imr = (avl_csr_addr == 3'b101);
|
||||
assign access_sce = (avl_csr_addr == 3'b110);
|
||||
|
||||
// read/write memory combi logic
|
||||
assign read_mem_combi = (avl_mem_read && ~avl_mem_waitrequest);
|
||||
assign write_mem_combi = (avl_mem_write && ~avl_mem_waitrequest);
|
||||
|
||||
// read csr logic
|
||||
assign read_status_combi = (avl_csr_read && access_csr_status && ~avl_csr_waitrequest);
|
||||
assign read_sid_combi = (avl_csr_read && access_csr_sid && ~avl_csr_waitrequest);
|
||||
assign read_rdid_combi = (avl_csr_read && access_csr_rdid && ~avl_csr_waitrequest);
|
||||
assign read_isr_combi = (avl_csr_read && access_isr && ~avl_csr_waitrequest);
|
||||
assign read_imr_combi = (avl_csr_read && access_imr && ~avl_csr_waitrequest);
|
||||
assign write_isr_combi = (avl_csr_write && access_isr && ~avl_csr_waitrequest);
|
||||
assign write_imr_combi = (avl_csr_write && access_imr && ~avl_csr_waitrequest);
|
||||
assign write_sce_combi = (avl_csr_write && access_sce && ~avl_csr_waitrequest);
|
||||
|
||||
// write csr logic
|
||||
assign bulk_erase_combi = (avl_csr_write && access_csr_mem_op && ~avl_csr_waitrequest && avl_csr_wrdata[1:0] == 2'b01);
|
||||
assign sector_erase_combi = (avl_csr_write && access_csr_mem_op && ~avl_csr_waitrequest && avl_csr_wrdata[1:0] == 2'b10);
|
||||
assign sector_protect_combi = (avl_csr_write && access_csr_mem_op && ~avl_csr_waitrequest && avl_csr_wrdata[1:0] == 2'b11);
|
||||
assign illegal_write_combi = (asmi_illegal_write) ? 1'b1 :
|
||||
(write_isr_combi && avl_csr_wrdata[1]) ? 1'b0 :
|
||||
illegal_write_reg;
|
||||
assign illegal_erase_combi = (asmi_illegal_erase) ? 1'b1 :
|
||||
(write_isr_combi && avl_csr_wrdata[0]) ? 1'b0 :
|
||||
illegal_erase_reg;
|
||||
assign m_illegal_write_combi= (write_imr_combi) ? avl_csr_wrdata[1] : m_illegal_write_reg;
|
||||
assign m_illegal_erase_combi= (write_imr_combi) ? avl_csr_wrdata[0] : m_illegal_erase_reg;
|
||||
assign wren_combi = (sector_protect_combi || sector_erase_combi || bulk_erase_combi);
|
||||
|
||||
assign asmi_rden = (rd_burstcount_cnt > 9'd0); // deasserted at the last 2 byte - refer to ASMI_PARALLEL UG
|
||||
|
||||
// interrupt signal
|
||||
assign irq = (illegal_write_reg && m_illegal_write_reg) || (illegal_erase_reg && m_illegal_erase_reg);
|
||||
|
||||
assign last_wr_byte = (wr_burstcount_cnt == wr_mem_burstcount - 9'd1) ? 1'b1 : 1'b0;
|
||||
|
||||
assign asmi_wren = wren_internal || asmi_en4b_addr || asmi_shift_bytes || asmi_write;
|
||||
|
||||
assign data_valid_combi = (rd_burstcount_cnt[1:0] == 2'b00) ? asmi_data_valid : 1'b0;
|
||||
|
||||
assign wfifo_data_in_0 = {avl_mem_byteenable[0], avl_mem_wrdata[7:0] };
|
||||
assign wfifo_data_in_1 = {avl_mem_byteenable[1], avl_mem_wrdata[15:8] };
|
||||
assign wfifo_data_in_2 = {avl_mem_byteenable[2], avl_mem_wrdata[23:16] };
|
||||
assign wfifo_data_in_3 = {avl_mem_byteenable[3], avl_mem_wrdata[31:24] };
|
||||
|
||||
assign avl_mem_rddata = {rd_data_reg[3], rd_data_reg[2], rd_data_reg[1], rd_data_reg[0]};
|
||||
assign pending_wr_data = (|wr_data_reg_full) ? 1'b1 : 1'b0;
|
||||
assign detect_addroffset = (pending_wr_data && wr_data_reg[wr_cnt][8]) ? 1'b1 :
|
||||
(wr_burstcount_cnt == {9{1'b0}}) ? 1'b0 : detect_addroffset_reg;
|
||||
|
||||
//-------------------------------- array to store write data -------------------------------------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
wr_data_reg <= '{{9{1'b0}}, {9{1'b0}}, {9{1'b0}}, {9{1'b0}}};
|
||||
wr_data_reg_full <= {4{1'b0}};
|
||||
end
|
||||
else if (write_mem_combi) begin
|
||||
wr_data_reg <= {wfifo_data_in_3, wfifo_data_in_2, wfifo_data_in_1, wfifo_data_in_0};
|
||||
wr_data_reg_full <= {4{1'b1}};
|
||||
end
|
||||
else if (wr_data_reg_full > 4'b0000) begin
|
||||
wr_data_reg_full <= wr_data_reg_full << 1;
|
||||
end
|
||||
end
|
||||
|
||||
//-------------------------------- array to store read data -------------------------------------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
rd_data_reg <= '{{8{1'b0}}, {8{1'b0}}, {8{1'b0}}, {8{1'b0}}};
|
||||
rd_cnt <= {2{1'b0}};
|
||||
end
|
||||
else if (asmi_data_valid) begin
|
||||
rd_data_reg[rd_cnt] <= asmi_dataout;
|
||||
rd_cnt <= rd_cnt + 2'b01;
|
||||
end
|
||||
end
|
||||
|
||||
//------------------------------- Enable 4-byte addressing out of reset ----------------------
|
||||
generate
|
||||
if (ENABLE_4BYTE_ADDR) begin
|
||||
typedef enum logic[1:0] {EN4B_CHIP1, EN4B_CHIP2, EN4B_CHIP3, IDLE} state_t;
|
||||
state_t state;
|
||||
|
||||
always @(posedge clk or negedge reset_n_reg) begin // use reset_n_reg because user is allow to send cmd to ASMI_PARALLEL 2 clock cycles after reset
|
||||
if (~reset_n_reg) begin
|
||||
state <= EN4B_CHIP1;
|
||||
asmi_en4b_addr <= 1'b1;
|
||||
temp_sce <= 3'b001;
|
||||
end
|
||||
else begin
|
||||
case (state)
|
||||
EN4B_CHIP1 : begin
|
||||
asmi_en4b_addr <= 1'b1;
|
||||
if (~asmi_busy) begin
|
||||
if (CHIP_SELS > 1) begin
|
||||
state <= EN4B_CHIP2;
|
||||
temp_sce <= 3'b010;
|
||||
end
|
||||
else begin
|
||||
state <= IDLE;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
end
|
||||
end
|
||||
EN4B_CHIP2 : begin
|
||||
asmi_en4b_addr <= 1'b1;
|
||||
if (~asmi_busy) begin
|
||||
if (CHIP_SELS > 2) begin
|
||||
state <= EN4B_CHIP3;
|
||||
temp_sce <= 3'b100;
|
||||
end
|
||||
else begin
|
||||
state <= IDLE;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
end
|
||||
end
|
||||
EN4B_CHIP3 : begin
|
||||
asmi_en4b_addr <= 1'b1;
|
||||
if (~asmi_busy) begin
|
||||
state <= IDLE;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
end
|
||||
IDLE : begin
|
||||
asmi_en4b_addr <= 1'b0;
|
||||
state <= IDLE;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
default : begin
|
||||
asmi_en4b_addr <= 1'b0;
|
||||
state <= IDLE;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
else begin
|
||||
always @(posedge clk) begin
|
||||
asmi_en4b_addr <= 1'b0;
|
||||
temp_sce <= 3'b000;
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
//--------------------------------------- Waitrequest logic ----------------------------------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
wr_mem_waitrequest <= 1'b0;
|
||||
local_waitrequest <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
if (read_mem_combi || read_status_combi || read_sid_combi || read_rdid_combi || bulk_erase_combi || sector_erase_combi || sector_protect_combi || asmi_en4b_addr) begin // no back pressure during imr & isr access
|
||||
local_waitrequest <= 1'b1;
|
||||
end
|
||||
else if (asmi_busy_reg && ~asmi_busy) begin
|
||||
local_waitrequest <= 1'b0;
|
||||
end
|
||||
|
||||
if (write_mem_combi) begin
|
||||
wr_mem_waitrequest <= 1'b1;
|
||||
end
|
||||
else if ((~pending_wr_data && ~asmi_write) || asmi_busy_reg && ~asmi_busy) begin
|
||||
wr_mem_waitrequest <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// -------------------------------------- MEM ACCESS -----------------------------------------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
rd_mem_burstcount <= {9{1'b0}};
|
||||
wr_mem_burstcount <= {9{1'b0}};
|
||||
wr_mem_addr <= {LOCAL_ADDR_WIDTH{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (read_mem_combi) begin
|
||||
rd_mem_burstcount <= {avl_mem_burstcount, 2'b00};
|
||||
end
|
||||
if (write_mem_combi && (wr_burstcount_cnt == {9{1'b0}})) begin
|
||||
wr_mem_addr <= {temp_mem_addr, 2'b00};
|
||||
wr_mem_burstcount <= {avl_mem_burstcount, 2'b00};
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
wr_burstcount_cnt <= {9{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (pending_wr_data) begin
|
||||
wr_burstcount_cnt <= wr_burstcount_cnt + 9'd1;
|
||||
end
|
||||
else if (wr_burstcount_cnt == wr_mem_burstcount) begin
|
||||
wr_burstcount_cnt <= {9{1'b0}};
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
rd_burstcount_cnt <= {9{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (read_mem_combi) begin
|
||||
rd_burstcount_cnt <= 9'd1;
|
||||
end
|
||||
else if (rd_burstcount_cnt == rd_mem_burstcount) begin // each rd 4 burst
|
||||
rd_burstcount_cnt <= {9{1'b0}};
|
||||
end
|
||||
else if (asmi_data_valid && rd_burstcount_cnt > 0) begin
|
||||
rd_burstcount_cnt <= rd_burstcount_cnt + 9'd1;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
asmi_addr <= {ASMI_ADDR_WIDTH{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (sector_erase_combi) begin // set lower 16 bits to zero so that erase at starting address of each sector
|
||||
asmi_addr <= {avl_csr_wrdata[LAST_ADDR_BIT : 8], {16{1'b0}}};
|
||||
end
|
||||
if (read_mem_combi) begin
|
||||
asmi_addr <= {temp_mem_addr, 2'b00};
|
||||
end
|
||||
|
||||
if (detect_addroffset && ~detect_addroffset_reg) begin
|
||||
asmi_addr <= wr_mem_addr + {{LOCAL_ADDR_WIDTH-9{1'b0}}, wr_burstcount_cnt};
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
asmi_datain <= {8{1'b0}};
|
||||
wr_cnt <= {2{1'b0}};
|
||||
asmi_shift_bytes <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
if (sector_protect_combi) begin
|
||||
asmi_datain <= {{1{1'b0}}, avl_csr_wrdata[11], avl_csr_wrdata[12], avl_csr_wrdata[10:8], {2{1'b0}}}; // BP3, TB, BP2, BP1, BP0
|
||||
end
|
||||
if (pending_wr_data) begin
|
||||
asmi_datain <= wr_data_reg[wr_cnt][7:0];
|
||||
wr_cnt <= wr_cnt + 2'd1;
|
||||
end
|
||||
if (pending_wr_data && wr_data_reg[wr_cnt][8]) begin
|
||||
asmi_shift_bytes <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
asmi_shift_bytes <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
asmi_read_status <= 1'b0;
|
||||
asmi_read_sid <= 1'b0;
|
||||
asmi_read_rdid <= 1'b0;
|
||||
asmi_bulk_erase <= 1'b0;
|
||||
asmi_sector_erase <= 1'b0;
|
||||
asmi_sector_protect <= 1'b0;
|
||||
wren_internal <= 1'b0;
|
||||
asmi_write <= 1'b0;
|
||||
asmi_fast_read <= 1'b0;
|
||||
asmi_busy_reg <= 1'b0;
|
||||
avl_mem_rddata_valid <= 1'b0;
|
||||
detect_addroffset_reg <= 1'b0;
|
||||
reset_n_reg <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
asmi_read_status <= read_status_combi;
|
||||
asmi_read_sid <= read_sid_combi;
|
||||
asmi_read_rdid <= read_rdid_combi;
|
||||
asmi_bulk_erase <= bulk_erase_combi;
|
||||
asmi_sector_erase <= sector_erase_combi;
|
||||
asmi_sector_protect <= sector_protect_combi;
|
||||
wren_internal <= wren_combi;
|
||||
asmi_write <= last_wr_byte;
|
||||
asmi_fast_read <= read_mem_combi;
|
||||
asmi_busy_reg <= asmi_busy;
|
||||
avl_mem_rddata_valid <= data_valid_combi;
|
||||
detect_addroffset_reg <= detect_addroffset;
|
||||
reset_n_reg <= 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
// --------------------------------------------- CSR ACCESS -------------------------------------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
illegal_write_reg <= 1'b0;
|
||||
illegal_erase_reg <= 1'b0;
|
||||
m_illegal_write_reg <= 1'b0;
|
||||
m_illegal_erase_reg <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
illegal_write_reg <= illegal_write_combi;
|
||||
illegal_erase_reg <= illegal_erase_combi;
|
||||
m_illegal_write_reg <= m_illegal_write_combi;
|
||||
m_illegal_erase_reg <= m_illegal_erase_combi;
|
||||
end
|
||||
end
|
||||
|
||||
// csr read only registers enable logic
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
read_status_en <= 1'b0;
|
||||
read_sid_en <= 1'b0;
|
||||
read_rdid_en <= 1'b0;
|
||||
end
|
||||
else if (asmi_read_status) begin
|
||||
read_status_en <= 1'b1;
|
||||
end
|
||||
else if (asmi_read_sid) begin
|
||||
read_sid_en <= 1'b1;
|
||||
end
|
||||
else if (asmi_read_rdid) begin
|
||||
read_rdid_en <= 1'b1;
|
||||
end
|
||||
else if (asmi_busy == 0) begin
|
||||
read_status_en <= 1'b0;
|
||||
read_sid_en <= 1'b0;
|
||||
read_rdid_en <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
// generation logic for avl csr read data valid
|
||||
assign avl_csr_rddata_valid = read_status_valid || read_sid_valid || read_rdid_valid || read_isr_valid || read_imr_valid;
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
read_status_valid <= 1'b0;
|
||||
read_sid_valid <= 1'b0;
|
||||
read_rdid_valid <= 1'b0;
|
||||
read_isr_valid <= 1'b0;
|
||||
read_imr_valid <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
if (read_status_en && asmi_busy == 0) begin
|
||||
read_status_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
read_status_valid <= 1'b0;
|
||||
end
|
||||
|
||||
if (read_sid_en && asmi_busy == 0) begin
|
||||
read_sid_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
read_sid_valid <= 1'b0;
|
||||
end
|
||||
|
||||
if (read_rdid_en && asmi_busy == 0) begin
|
||||
read_rdid_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
read_rdid_valid <= 1'b0;
|
||||
end
|
||||
|
||||
if (read_isr_combi) begin
|
||||
read_isr_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
read_isr_valid <= 1'b0;
|
||||
end
|
||||
|
||||
if (read_imr_combi) begin
|
||||
read_imr_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
read_imr_valid <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// generation logic for avl csr read data
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
avl_csr_rddata <= {CSR_DATA_WIDTH{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (read_status_en && asmi_busy == 0) begin
|
||||
avl_csr_rddata <= {{CSR_DATA_WIDTH-8{1'b0}}, asmi_status_out};
|
||||
end
|
||||
if (read_sid_en && asmi_busy == 0) begin
|
||||
avl_csr_rddata <= {{CSR_DATA_WIDTH-8{1'b0}}, asmi_epcs_id};
|
||||
end
|
||||
if (read_rdid_en && asmi_busy == 0) begin
|
||||
avl_csr_rddata <= {{CSR_DATA_WIDTH-8{1'b0}}, asmi_rdid_out};
|
||||
end
|
||||
if (read_isr_combi) begin
|
||||
avl_csr_rddata <= {{CSR_DATA_WIDTH-2{1'b0}}, illegal_write_reg, illegal_erase_reg};
|
||||
end
|
||||
if (read_imr_combi) begin
|
||||
avl_csr_rddata <= {{CSR_DATA_WIDTH-2{1'b0}}, m_illegal_write_reg, m_illegal_erase_reg};
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
@ -1,230 +0,0 @@
|
||||
// (C) 2001-2015 Altera Corporation. All rights reserved.
|
||||
// Your use of Altera Corporation's design tools, logic functions and other
|
||||
// software and tools, and its AMPP partner logic functions, and any output
|
||||
// files any of the foregoing (including device programming or simulation
|
||||
// files), and any associated documentation or information are expressly subject
|
||||
// to the terms and conditions of the Altera Program License Subscription
|
||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
// license agreement, including, without limitation, that your use is for the
|
||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
// Altera or its authorized distributors. Please refer to the applicable
|
||||
// agreement for further details.
|
||||
|
||||
|
||||
// (C) 2001-2014 Altera Corporation. All rights reserved.
|
||||
// Your use of Altera Corporation's design tools, logic functions and other
|
||||
// software and tools, and its AMPP partner logic functions, and any output
|
||||
// files any of the foregoing (including device programming or simulation
|
||||
// files), and any associated documentation or information are expressly subject
|
||||
// to the terms and conditions of the Altera Program License Subscription
|
||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
// license agreement, including, without limitation, that your use is for the
|
||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
// Altera or its authorized distributors. Please refer to the applicable
|
||||
// agreement for further details.
|
||||
|
||||
`timescale 1ps / 1ps
|
||||
|
||||
module altera_epcq_controller_arb #(
|
||||
parameter CS_WIDTH = 1,
|
||||
parameter ENABLE_4BYTE_ADDR = 1,
|
||||
parameter ADDR_WIDTH = 22,
|
||||
parameter ASI_WIDTH = 1,
|
||||
parameter DEVICE_FAMILY = "CYCLONE V",
|
||||
parameter ASMI_ADDR_WIDTH = 22,
|
||||
parameter CHIP_SELS = 1
|
||||
)(
|
||||
input wire clk,
|
||||
input wire reset_n,
|
||||
|
||||
// ports to access csr
|
||||
input wire avl_csr_write,
|
||||
input wire avl_csr_read,
|
||||
input wire [2:0] avl_csr_addr,
|
||||
input wire [31:0] avl_csr_wrdata,
|
||||
output reg [31:0] avl_csr_rddata,
|
||||
output reg avl_csr_rddata_valid,
|
||||
output reg avl_csr_waitrequest,
|
||||
|
||||
// ports to access memory
|
||||
input wire avl_mem_write,
|
||||
input wire avl_mem_read,
|
||||
input wire [ADDR_WIDTH-1:0] avl_mem_addr,
|
||||
input wire [31:0] avl_mem_wrdata,
|
||||
input wire [3:0] avl_mem_byteenable,
|
||||
input wire [6:0] avl_mem_burstcount,
|
||||
output wire [31:0] avl_mem_rddata,
|
||||
output reg avl_mem_rddata_valid,
|
||||
output reg avl_mem_waitrequest,
|
||||
|
||||
// interrupt signal
|
||||
output reg irq,
|
||||
|
||||
// Disable dedicated active serial interface
|
||||
input wire [ASI_WIDTH-1:0] epcq_dataout,
|
||||
output reg epcq_dclk,
|
||||
output reg [CS_WIDTH-1:0] epcq_scein,
|
||||
output reg [ASI_WIDTH-1:0] epcq_sdoin,
|
||||
output reg [ASI_WIDTH-1:0] epcq_dataoe,
|
||||
|
||||
// ASMI PARALLEL interface
|
||||
input wire [ASI_WIDTH-1:0] ddasi_dataoe,
|
||||
output reg [ASI_WIDTH-1:0] ddasi_dataout,
|
||||
input wire ddasi_dclk,
|
||||
input wire [CS_WIDTH-1:0] ddasi_scein,
|
||||
input reg [ASI_WIDTH-1:0] ddasi_sdoin,
|
||||
|
||||
input wire asmi_busy,
|
||||
input wire asmi_data_valid,
|
||||
input wire [7:0] asmi_dataout,
|
||||
output reg asmi_clkin,
|
||||
output reg asmi_reset,
|
||||
output reg [CS_WIDTH-1:0] asmi_sce,
|
||||
output reg [ASMI_ADDR_WIDTH-1:0] asmi_addr,
|
||||
output reg [7:0] asmi_datain,
|
||||
output reg asmi_fast_read,
|
||||
output wire asmi_rden,
|
||||
output reg asmi_shift_bytes,
|
||||
output reg asmi_en4b_addr,
|
||||
output wire asmi_wren,
|
||||
output reg asmi_write,
|
||||
|
||||
input wire asmi_illegal_erase,
|
||||
input wire asmi_illegal_write,
|
||||
input wire [7:0] asmi_rdid_out,
|
||||
input wire [7:0] asmi_status_out,
|
||||
input wire [7:0] asmi_epcs_id,
|
||||
output reg asmi_read_rdid,
|
||||
output reg asmi_read_status,
|
||||
output reg asmi_read_sid,
|
||||
output reg asmi_bulk_erase,
|
||||
output reg asmi_sector_erase,
|
||||
output reg asmi_sector_protect
|
||||
);
|
||||
|
||||
reg temp_mem_write, temp_mem_read, mem_write, mem_read, back_pressured_ctrl;
|
||||
reg [ADDR_WIDTH-1:0] temp_mem_addr, mem_addr;
|
||||
reg [31:0] temp_mem_wrdata, mem_wrdata;
|
||||
reg [3:0] temp_mem_byteenable, mem_byteenable;
|
||||
reg [6:0] temp_mem_burstcount, mem_burstcount;
|
||||
|
||||
wire back_pressured, temp_csr_waitrequest, temp_mem_waitrequest;
|
||||
|
||||
//-------------------- Arbitration logic between avalon csr and mem interface -----------
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
back_pressured_ctrl <= 1'b0;
|
||||
end
|
||||
else if (back_pressured) begin
|
||||
back_pressured_ctrl <= 1'b1;
|
||||
end
|
||||
else if (~temp_csr_waitrequest) begin
|
||||
back_pressured_ctrl <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge reset_n) begin
|
||||
if (~reset_n) begin
|
||||
mem_write <= 1'b0;
|
||||
mem_read <= 1'b0;
|
||||
mem_addr <= {ADDR_WIDTH{1'b0}};
|
||||
mem_wrdata <= {32{1'b0}};
|
||||
mem_byteenable <= {4{1'b0}};
|
||||
mem_burstcount <= {7{1'b0}};
|
||||
end
|
||||
else if ((avl_csr_write || avl_csr_read) && ~avl_csr_waitrequest && (avl_mem_write || avl_mem_read) && ~avl_mem_waitrequest) begin
|
||||
// to back pressure master
|
||||
mem_write <= avl_mem_write;
|
||||
mem_read <= avl_mem_read;
|
||||
mem_addr <= avl_mem_addr;
|
||||
mem_wrdata <= avl_mem_wrdata;
|
||||
mem_byteenable <= avl_mem_byteenable;
|
||||
mem_burstcount <= avl_mem_burstcount;
|
||||
end
|
||||
end
|
||||
|
||||
assign back_pressured = ((avl_csr_write || avl_csr_read) && ~temp_csr_waitrequest && (avl_mem_write || avl_mem_read)) ? 1'b1 : 1'b0; // to back pressure controller
|
||||
assign avl_csr_waitrequest = (~avl_csr_write && ~avl_csr_read && back_pressured_ctrl) ? 1'b1 : temp_csr_waitrequest;
|
||||
assign avl_mem_waitrequest = (back_pressured_ctrl) ? 1'b1 : temp_mem_waitrequest;
|
||||
assign temp_mem_write = (back_pressured) ? 1'b0 :
|
||||
(back_pressured_ctrl) ? mem_write : avl_mem_write;
|
||||
assign temp_mem_read = (back_pressured) ? 1'b0 :
|
||||
(back_pressured_ctrl) ? mem_read : avl_mem_read;
|
||||
assign temp_mem_addr = (back_pressured) ? {ADDR_WIDTH{1'b0}} :
|
||||
(back_pressured_ctrl) ? mem_addr : avl_mem_addr;
|
||||
assign temp_mem_wrdata = (back_pressured) ? {32{1'b0}} :
|
||||
(back_pressured_ctrl) ? mem_wrdata : avl_mem_wrdata;
|
||||
assign temp_mem_byteenable = (back_pressured) ? {4{1'b0}} :
|
||||
(back_pressured_ctrl) ? mem_byteenable : avl_mem_byteenable;
|
||||
assign temp_mem_burstcount = (back_pressured) ? {7{1'b0}} :
|
||||
(back_pressured_ctrl) ? mem_burstcount : avl_mem_burstcount;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------------------//
|
||||
|
||||
altera_epcq_controller #(
|
||||
.CS_WIDTH (CS_WIDTH),
|
||||
.DEVICE_FAMILY (DEVICE_FAMILY),
|
||||
.ADDR_WIDTH (ADDR_WIDTH),
|
||||
.ASMI_ADDR_WIDTH (ASMI_ADDR_WIDTH),
|
||||
.ASI_WIDTH (ASI_WIDTH),
|
||||
.CHIP_SELS (CHIP_SELS),
|
||||
.ENABLE_4BYTE_ADDR (ENABLE_4BYTE_ADDR)
|
||||
) controller (
|
||||
.clk (clk),
|
||||
.reset_n (reset_n),
|
||||
.avl_csr_read (avl_csr_read),
|
||||
.avl_csr_waitrequest (temp_csr_waitrequest),
|
||||
.avl_csr_write (avl_csr_write),
|
||||
.avl_csr_addr (avl_csr_addr),
|
||||
.avl_csr_wrdata (avl_csr_wrdata),
|
||||
.avl_csr_rddata (avl_csr_rddata),
|
||||
.avl_csr_rddata_valid (avl_csr_rddata_valid),
|
||||
.avl_mem_write (temp_mem_write),
|
||||
.avl_mem_burstcount (temp_mem_burstcount),
|
||||
.avl_mem_waitrequest (temp_mem_waitrequest),
|
||||
.avl_mem_read (temp_mem_read),
|
||||
.avl_mem_addr (temp_mem_addr),
|
||||
.avl_mem_wrdata (temp_mem_wrdata),
|
||||
.avl_mem_byteenable (temp_mem_byteenable),
|
||||
.avl_mem_rddata (avl_mem_rddata),
|
||||
.avl_mem_rddata_valid (avl_mem_rddata_valid),
|
||||
.asmi_status_out (asmi_status_out),
|
||||
.asmi_epcs_id (asmi_epcs_id),
|
||||
.asmi_illegal_erase (asmi_illegal_erase),
|
||||
.asmi_illegal_write (asmi_illegal_write),
|
||||
.ddasi_dataoe (ddasi_dataoe),
|
||||
.ddasi_dclk (ddasi_dclk),
|
||||
.ddasi_scein (ddasi_scein),
|
||||
.ddasi_sdoin (ddasi_sdoin),
|
||||
.asmi_busy (asmi_busy),
|
||||
.asmi_data_valid (asmi_data_valid),
|
||||
.asmi_dataout (asmi_dataout),
|
||||
.epcq_dataout (epcq_dataout),
|
||||
.ddasi_dataout (ddasi_dataout),
|
||||
.asmi_read_rdid (asmi_read_rdid),
|
||||
.asmi_read_status (asmi_read_status),
|
||||
.asmi_read_sid (asmi_read_sid),
|
||||
.asmi_bulk_erase (asmi_bulk_erase),
|
||||
.asmi_sector_erase (asmi_sector_erase),
|
||||
.asmi_sector_protect (asmi_sector_protect),
|
||||
.epcq_dclk (epcq_dclk),
|
||||
.epcq_scein (epcq_scein),
|
||||
.epcq_sdoin (epcq_sdoin),
|
||||
.epcq_dataoe (epcq_dataoe),
|
||||
.asmi_clkin (asmi_clkin),
|
||||
.asmi_reset (asmi_reset),
|
||||
.asmi_sce (asmi_sce),
|
||||
.asmi_addr (asmi_addr),
|
||||
.asmi_datain (asmi_datain),
|
||||
.asmi_fast_read (asmi_fast_read),
|
||||
.asmi_rden (asmi_rden),
|
||||
.asmi_shift_bytes (asmi_shift_bytes),
|
||||
.asmi_wren (asmi_wren),
|
||||
.asmi_write (asmi_write),
|
||||
.asmi_rdid_out (asmi_rdid_out),
|
||||
.asmi_en4b_addr (asmi_en4b_addr),
|
||||
.irq (irq)
|
||||
);
|
||||
|
||||
endmodule
|
@ -1,176 +0,0 @@
|
||||
// (C) 2001-2015 Altera Corporation. All rights reserved.
|
||||
// Your use of Altera Corporation's design tools, logic functions and other
|
||||
// software and tools, and its AMPP partner logic functions, and any output
|
||||
// files any of the foregoing (including device programming or simulation
|
||||
// files), and any associated documentation or information are expressly subject
|
||||
// to the terms and conditions of the Altera Program License Subscription
|
||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
// license agreement, including, without limitation, that your use is for the
|
||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
// Altera or its authorized distributors. Please refer to the applicable
|
||||
// agreement for further details.
|
||||
|
||||
|
||||
// megafunction wizard: %FIFO%
|
||||
// GENERATION: STANDARD
|
||||
// VERSION: WM1.0
|
||||
// MODULE: scfifo
|
||||
|
||||
// ============================================================
|
||||
// File Name: altera_epcq_controller_fifo.v
|
||||
// Megafunction Name(s):
|
||||
// scfifo
|
||||
//
|
||||
// Simulation Library Files(s):
|
||||
// altera_mf
|
||||
// ============================================================
|
||||
// ************************************************************
|
||||
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
||||
//
|
||||
// 14.1.0 Internal Build 64 05/14/2014 PN Full Version
|
||||
// ************************************************************
|
||||
|
||||
|
||||
//Copyright (C) 1991-2014 Altera Corporation. All rights reserved.
|
||||
//Your use of Altera Corporation's design tools, logic functions
|
||||
//and other software and tools, and its AMPP partner logic
|
||||
//functions, and any output files from any of the foregoing
|
||||
//(including device programming or simulation files), and any
|
||||
//associated documentation or information are expressly subject
|
||||
//to the terms and conditions of the Altera Program License
|
||||
//Subscription Agreement, the Altera Quartus II License Agreement,
|
||||
//the Altera MegaCore Function License Agreement, or other
|
||||
//applicable license agreement, including, without limitation,
|
||||
//that your use is for the sole purpose of programming logic
|
||||
//devices manufactured by Altera and sold by Altera or its
|
||||
//authorized distributors. Please refer to the applicable
|
||||
//agreement for further details.
|
||||
|
||||
|
||||
// synopsys translate_off
|
||||
`timescale 1 ps / 1 ps
|
||||
// synopsys translate_on
|
||||
module altera_epcq_controller_fifo #(
|
||||
parameter DEVICE_FAMILY = "CYCLONE V",
|
||||
parameter MEMORY_TYPE = "RAM_BLOCK_TYPE=MLAB"
|
||||
)(
|
||||
clock,
|
||||
data,
|
||||
rdreq,
|
||||
wrreq,
|
||||
empty,
|
||||
full,
|
||||
q);
|
||||
|
||||
input clock;
|
||||
input [35:0] data;
|
||||
input rdreq;
|
||||
input wrreq;
|
||||
output empty;
|
||||
output full;
|
||||
output [35:0] q;
|
||||
|
||||
wire sub_wire0;
|
||||
wire sub_wire1;
|
||||
wire [35:0] sub_wire2;
|
||||
wire empty = sub_wire0;
|
||||
wire full = sub_wire1;
|
||||
wire [35:0] q = sub_wire2[35:0];
|
||||
|
||||
scfifo scfifo_component (
|
||||
.clock (clock),
|
||||
.data (data),
|
||||
.rdreq (rdreq),
|
||||
.wrreq (wrreq),
|
||||
.empty (sub_wire0),
|
||||
.full (sub_wire1),
|
||||
.q (sub_wire2),
|
||||
.aclr (),
|
||||
.almost_empty (),
|
||||
.almost_full (),
|
||||
.sclr (),
|
||||
.usedw ());
|
||||
defparam
|
||||
scfifo_component.add_ram_output_register = "OFF",
|
||||
scfifo_component.intended_device_family = DEVICE_FAMILY,
|
||||
scfifo_component.lpm_hint = MEMORY_TYPE,
|
||||
scfifo_component.lpm_numwords = 1024,
|
||||
scfifo_component.lpm_showahead = "ON",
|
||||
scfifo_component.lpm_type = "scfifo",
|
||||
scfifo_component.lpm_width = 36,
|
||||
scfifo_component.lpm_widthu = 10,
|
||||
scfifo_component.overflow_checking = "ON",
|
||||
scfifo_component.underflow_checking = "ON",
|
||||
scfifo_component.use_eab = "ON";
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// ============================================================
|
||||
// CNX file retrieval info
|
||||
// ============================================================
|
||||
// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1"
|
||||
// Retrieval info: PRIVATE: AlmostFull NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1"
|
||||
// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: Clock NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: Depth NUMERIC "1024"
|
||||
// Retrieval info: PRIVATE: Empty NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: Full NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV GX"
|
||||
// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: Optimize NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "2"
|
||||
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
||||
// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: UsedW NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: Width NUMERIC "8"
|
||||
// Retrieval info: PRIVATE: dc_aclr NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: diff_widths NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: msb_usedw NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: output_width NUMERIC "8"
|
||||
// Retrieval info: PRIVATE: rsEmpty NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: rsFull NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: rsUsedW NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: sc_aclr NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: sc_sclr NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: wsEmpty NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: wsFull NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: wsUsedW NUMERIC "0"
|
||||
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
||||
// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF"
|
||||
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV GX"
|
||||
// Retrieval info: CONSTANT: LPM_HINT STRING "RAM_BLOCK_TYPE=M9K"
|
||||
// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "1024"
|
||||
// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "ON"
|
||||
// Retrieval info: CONSTANT: LPM_TYPE STRING "scfifo"
|
||||
// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8"
|
||||
// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "10"
|
||||
// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON"
|
||||
// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON"
|
||||
// Retrieval info: CONSTANT: USE_EAB STRING "ON"
|
||||
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL "clock"
|
||||
// Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]"
|
||||
// Retrieval info: USED_PORT: empty 0 0 0 0 OUTPUT NODEFVAL "empty"
|
||||
// Retrieval info: USED_PORT: full 0 0 0 0 OUTPUT NODEFVAL "full"
|
||||
// Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
|
||||
// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL "rdreq"
|
||||
// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL "wrreq"
|
||||
// Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0
|
||||
// Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0
|
||||
// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0
|
||||
// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0
|
||||
// Retrieval info: CONNECT: empty 0 0 0 0 @empty 0 0 0 0
|
||||
// Retrieval info: CONNECT: full 0 0 0 0 @full 0 0 0 0
|
||||
// Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo.v TRUE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo.inc FALSE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo.cmp FALSE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo.bsf FALSE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_inst.v FALSE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_bb.v FALSE
|
||||
// Retrieval info: LIB_FILE: altera_mf
|
@ -1,453 +0,0 @@
|
||||
# (C) 2001-2015 Altera Corporation. All rights reserved.
|
||||
# Your use of Altera Corporation's design tools, logic functions and other
|
||||
# software and tools, and its AMPP partner logic functions, and any output
|
||||
# files any of the foregoing (including device programming or simulation
|
||||
# files), and any associated documentation or information are expressly subject
|
||||
# to the terms and conditions of the Altera Program License Subscription
|
||||
# Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||
# license agreement, including, without limitation, that your use is for the
|
||||
# sole purpose of programming logic devices manufactured by Altera and sold by
|
||||
# Altera or its authorized distributors. Please refer to the applicable
|
||||
# agreement for further details.
|
||||
|
||||
|
||||
# TCL File Generated by Component Editor 14.1
|
||||
# Fri May 09 18:08:10 MYT 2014
|
||||
# DO NOT MODIFY
|
||||
|
||||
|
||||
#
|
||||
# altera_epcq_controller_core "Altera EPCQ Serial Flash controller core" v14.1
|
||||
# Altera Coorperation 2014.05.23.15:01:29
|
||||
# This component is a serial flash controller which allows user to access Altera EPCQ devices
|
||||
#
|
||||
|
||||
#
|
||||
# request TCL package from ACDS 14.1
|
||||
#
|
||||
package require -exact qsys 14.1
|
||||
|
||||
|
||||
|
||||
#
|
||||
# module altera_epcq_controller
|
||||
#
|
||||
set_module_property DESCRIPTION "This component is a serial flash controller which allows user to access Altera EPCQ devices"
|
||||
set_module_property NAME altera_epcq_controller_core
|
||||
set_module_property VERSION 19.1
|
||||
set_module_property INTERNAL true
|
||||
set_module_property OPAQUE_ADDRESS_MAP true
|
||||
set_module_property AUTHOR "Altera Corporation"
|
||||
set_module_property DISPLAY_NAME "Altera EPCQ Serial Flash controller core"
|
||||
set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
|
||||
set_module_property HIDE_FROM_QUARTUS true
|
||||
set_module_property EDITABLE true
|
||||
set_module_property REPORT_TO_TALKBACK false
|
||||
set_module_property ALLOW_GREYBOX_GENERATION false
|
||||
set_module_property REPORT_HIERARCHY false
|
||||
set_module_property VALIDATION_CALLBACK "validate"
|
||||
#
|
||||
# file sets
|
||||
#
|
||||
add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
|
||||
set_fileset_property QUARTUS_SYNTH TOP_LEVEL altera_epcq_controller_arb
|
||||
set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
|
||||
set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
|
||||
add_fileset_file altera_epcq_controller_arb.sv SYSTEM_VERILOG PATH altera_epcq_controller_arb.sv TOP_LEVEL_FILE
|
||||
add_fileset_file altera_epcq_controller.sv SYSTEM_VERILOG PATH altera_epcq_controller.sv
|
||||
|
||||
add_fileset SIM_VERILOG SIM_VERILOG "" ""
|
||||
set_fileset_property SIM_VERILOG TOP_LEVEL altera_epcq_controller_arb
|
||||
set_fileset_property SIM_VERILOG ENABLE_RELATIVE_INCLUDE_PATHS false
|
||||
set_fileset_property SIM_VERILOG ENABLE_FILE_OVERWRITE_MODE true
|
||||
add_fileset_file altera_epcq_controller_arb.sv SYSTEM_VERILOG PATH altera_epcq_controller_arb.sv TOP_LEVEL_FILE
|
||||
add_fileset_file altera_epcq_controller.sv SYSTEM_VERILOG PATH altera_epcq_controller.sv
|
||||
|
||||
#
|
||||
# add system info parameter
|
||||
add_parameter deviceFeaturesSystemInfo STRING "None"
|
||||
set_parameter_property deviceFeaturesSystemInfo system_info "DEVICE_FEATURES"
|
||||
set_parameter_property deviceFeaturesSystemInfo VISIBLE false
|
||||
|
||||
#
|
||||
# parameters
|
||||
#
|
||||
add_parameter DEVICE_FAMILY STRING ""
|
||||
set_parameter_property DEVICE_FAMILY SYSTEM_INFO "DEVICE_FAMILY"
|
||||
set_parameter_property DEVICE_FAMILY HDL_PARAMETER true
|
||||
set_parameter_property DEVICE_FAMILY VISIBLE false
|
||||
|
||||
add_parameter ADDR_WIDTH INTEGER 19
|
||||
set_parameter_property ADDR_WIDTH DEFAULT_VALUE 19
|
||||
set_parameter_property ADDR_WIDTH DISPLAY_NAME ADDR_WIDTH
|
||||
set_parameter_property ADDR_WIDTH DERIVED true
|
||||
set_parameter_property ADDR_WIDTH TYPE INTEGER
|
||||
set_parameter_property ADDR_WIDTH VISIBLE false
|
||||
set_parameter_property ADDR_WIDTH UNITS None
|
||||
set_parameter_property ADDR_WIDTH ALLOWED_RANGES {19, 20, 21, 22, 23, 24, 25, 26, 27, 28}
|
||||
set_parameter_property ADDR_WIDTH HDL_PARAMETER true
|
||||
|
||||
add_parameter ASMI_ADDR_WIDTH INTEGER 24
|
||||
set_parameter_property ASMI_ADDR_WIDTH DEFAULT_VALUE 24
|
||||
set_parameter_property ASMI_ADDR_WIDTH DISPLAY_NAME ASMI_ADDR_WIDTH
|
||||
set_parameter_property ASMI_ADDR_WIDTH DERIVED true
|
||||
set_parameter_property ASMI_ADDR_WIDTH TYPE INTEGER
|
||||
set_parameter_property ASMI_ADDR_WIDTH VISIBLE false
|
||||
set_parameter_property ASMI_ADDR_WIDTH UNITS None
|
||||
set_parameter_property ASMI_ADDR_WIDTH ALLOWED_RANGES {24, 32}
|
||||
set_parameter_property ASMI_ADDR_WIDTH HDL_PARAMETER true
|
||||
|
||||
add_parameter ASI_WIDTH INTEGER 1
|
||||
set_parameter_property ASI_WIDTH DEFAULT_VALUE 1
|
||||
set_parameter_property ASI_WIDTH DISPLAY_NAME ASI_WIDTH
|
||||
set_parameter_property ASI_WIDTH DERIVED true
|
||||
set_parameter_property ASI_WIDTH TYPE INTEGER
|
||||
set_parameter_property ASI_WIDTH VISIBLE false
|
||||
set_parameter_property ASI_WIDTH UNITS None
|
||||
set_parameter_property ASI_WIDTH ALLOWED_RANGES {1, 4}
|
||||
set_parameter_property ASI_WIDTH HDL_PARAMETER true
|
||||
|
||||
add_parameter CS_WIDTH INTEGER 1
|
||||
set_parameter_property CS_WIDTH DEFAULT_VALUE 1
|
||||
set_parameter_property CS_WIDTH DISPLAY_NAME CS_WIDTH
|
||||
set_parameter_property CS_WIDTH DERIVED true
|
||||
set_parameter_property CS_WIDTH TYPE INTEGER
|
||||
set_parameter_property CS_WIDTH VISIBLE false
|
||||
set_parameter_property CS_WIDTH UNITS None
|
||||
set_parameter_property CS_WIDTH ALLOWED_RANGES {1, 3}
|
||||
set_parameter_property CS_WIDTH HDL_PARAMETER true
|
||||
|
||||
add_parameter CHIP_SELS INTEGER "1"
|
||||
set_parameter_property CHIP_SELS DISPLAY_NAME "Number of Chip Selects used"
|
||||
set_parameter_property CHIP_SELS ALLOWED_RANGES {1 2 3}
|
||||
set_parameter_property CHIP_SELS DESCRIPTION "Number of EPCQ(L) devices that are attached and need a CHIPSEL"
|
||||
set_parameter_property CHIP_SELS HDL_PARAMETER true
|
||||
set_parameter_property CHIP_SELS AFFECTS_GENERATION true
|
||||
|
||||
add_parameter DDASI INTEGER "0"
|
||||
set_parameter_property DDASI DISPLAY_NAME "Disable dedicated Active Serial interface"
|
||||
set_parameter_property DDASI DESCRIPTION "Check to route ASMIBLOCK signals to top level of design"
|
||||
set_parameter_property DDASI AFFECTS_GENERATION true
|
||||
set_parameter_property DDASI VISIBLE false
|
||||
set_parameter_property DDASI DERIVED false
|
||||
|
||||
add_parameter ENABLE_4BYTE_ADDR INTEGER "0"
|
||||
set_parameter_property ENABLE_4BYTE_ADDR DISPLAY_NAME "Enable 4-byte addressing mode"
|
||||
set_parameter_property ENABLE_4BYTE_ADDR DESCRIPTION "Check to enable 4-byte addressing mode for device larger than 128Mbyte"
|
||||
set_parameter_property ENABLE_4BYTE_ADDR AFFECTS_GENERATION true
|
||||
set_parameter_property ENABLE_4BYTE_ADDR VISIBLE false
|
||||
set_parameter_property ENABLE_4BYTE_ADDR HDL_PARAMETER true
|
||||
set_parameter_property ENABLE_4BYTE_ADDR DERIVED true
|
||||
|
||||
# SPI device selection
|
||||
add_parameter FLASH_TYPE STRING "EPCQ16"
|
||||
set_parameter_property FLASH_TYPE DISPLAY_NAME "Configuration device type"
|
||||
set_parameter_property FLASH_TYPE DESCRIPTION "Select targeted EPCS/EPCQ devices"
|
||||
set_parameter_property FLASH_TYPE AFFECTS_GENERATION true
|
||||
set_parameter_property FLASH_TYPE VISIBLE true
|
||||
set_parameter_property FLASH_TYPE DERIVED false
|
||||
|
||||
add_parameter IO_MODE STRING "STANDARD"
|
||||
set_parameter_property IO_MODE DISPLAY_NAME "Choose I/O mode"
|
||||
set_parameter_property IO_MODE ALLOWED_RANGES {"STANDARD" "QUAD"}
|
||||
set_parameter_property IO_MODE DESCRIPTION "Select extended data width when Fast Read operation is enabled"
|
||||
|
||||
#
|
||||
# display items
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# connection point clock_sink
|
||||
#
|
||||
add_interface clock_sink clock end
|
||||
set_interface_property clock_sink clockRate 0
|
||||
set_interface_property clock_sink ENABLED true
|
||||
set_interface_property clock_sink EXPORT_OF ""
|
||||
set_interface_property clock_sink PORT_NAME_MAP ""
|
||||
set_interface_property clock_sink CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property clock_sink SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port clock_sink clk clk Input 1
|
||||
|
||||
|
||||
#
|
||||
# connection point reset
|
||||
#
|
||||
add_interface reset reset end
|
||||
set_interface_property reset associatedClock clock_sink
|
||||
set_interface_property reset synchronousEdges DEASSERT
|
||||
set_interface_property reset ENABLED true
|
||||
set_interface_property reset EXPORT_OF ""
|
||||
set_interface_property reset PORT_NAME_MAP ""
|
||||
set_interface_property reset CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property reset SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port reset reset_n reset_n Input 1
|
||||
|
||||
|
||||
#
|
||||
# connection point avl_csr
|
||||
#
|
||||
add_interface avl_csr avalon end
|
||||
set_interface_property avl_csr addressUnits WORDS
|
||||
set_interface_property avl_csr associatedClock clock_sink
|
||||
set_interface_property avl_csr associatedReset reset
|
||||
set_interface_property avl_csr bitsPerSymbol 8
|
||||
set_interface_property avl_csr burstOnBurstBoundariesOnly false
|
||||
set_interface_property avl_csr burstcountUnits WORDS
|
||||
set_interface_property avl_csr explicitAddressSpan 0
|
||||
set_interface_property avl_csr holdTime 0
|
||||
set_interface_property avl_csr linewrapBursts false
|
||||
set_interface_property avl_csr maximumPendingReadTransactions 1
|
||||
set_interface_property avl_csr maximumPendingWriteTransactions 0
|
||||
set_interface_property avl_csr readLatency 0
|
||||
set_interface_property avl_csr readWaitTime 0
|
||||
set_interface_property avl_csr setupTime 0
|
||||
set_interface_property avl_csr timingUnits Cycles
|
||||
set_interface_property avl_csr writeWaitTime 0
|
||||
set_interface_property avl_csr ENABLED true
|
||||
set_interface_property avl_csr EXPORT_OF ""
|
||||
set_interface_property avl_csr PORT_NAME_MAP ""
|
||||
set_interface_property avl_csr CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property avl_csr SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port avl_csr avl_csr_read read Input 1
|
||||
add_interface_port avl_csr avl_csr_waitrequest waitrequest Output 1
|
||||
add_interface_port avl_csr avl_csr_write write Input 1
|
||||
add_interface_port avl_csr avl_csr_addr address Input 3
|
||||
add_interface_port avl_csr avl_csr_wrdata writedata Input 32
|
||||
add_interface_port avl_csr avl_csr_rddata readdata Output 32
|
||||
add_interface_port avl_csr avl_csr_rddata_valid readdatavalid Output 1
|
||||
|
||||
|
||||
#
|
||||
# connection point avl_mem
|
||||
#
|
||||
add_interface avl_mem avalon end
|
||||
set_interface_property avl_mem addressUnits WORDS
|
||||
set_interface_property avl_mem associatedClock clock_sink
|
||||
set_interface_property avl_mem associatedReset reset
|
||||
set_interface_property avl_mem bitsPerSymbol 8
|
||||
set_interface_property avl_mem burstOnBurstBoundariesOnly false
|
||||
set_interface_property avl_mem burstcountUnits WORDS
|
||||
set_interface_property avl_mem explicitAddressSpan 0
|
||||
set_interface_property avl_mem holdTime 0
|
||||
set_interface_property avl_mem linewrapBursts true
|
||||
set_interface_property avl_mem maximumPendingReadTransactions 1
|
||||
set_interface_property avl_mem maximumPendingWriteTransactions 0
|
||||
set_interface_property avl_mem constantBurstBehavior true
|
||||
set_interface_property avl_mem readLatency 0
|
||||
set_interface_property avl_mem readWaitTime 0
|
||||
set_interface_property avl_mem setupTime 0
|
||||
set_interface_property avl_mem timingUnits Cycles
|
||||
set_interface_property avl_mem writeWaitTime 0
|
||||
set_interface_property avl_mem ENABLED true
|
||||
set_interface_property avl_mem EXPORT_OF ""
|
||||
set_interface_property avl_mem PORT_NAME_MAP ""
|
||||
set_interface_property avl_mem CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property avl_mem SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port avl_mem avl_mem_write write Input 1
|
||||
add_interface_port avl_mem avl_mem_burstcount burstcount Input 7
|
||||
add_interface_port avl_mem avl_mem_waitrequest waitrequest Output 1
|
||||
add_interface_port avl_mem avl_mem_read read Input 1
|
||||
add_interface_port avl_mem avl_mem_addr address Input ADDR_WIDTH
|
||||
add_interface_port avl_mem avl_mem_wrdata writedata Input 32
|
||||
add_interface_port avl_mem avl_mem_rddata readdata Output 32
|
||||
add_interface_port avl_mem avl_mem_rddata_valid readdatavalid Output 1
|
||||
add_interface_port avl_mem avl_mem_byteenable byteenable Input 4
|
||||
|
||||
|
||||
#
|
||||
# connection point conduit_out
|
||||
#
|
||||
add_interface asmi_status_out conduit end
|
||||
add_interface_port asmi_status_out asmi_status_out conduit_status_out Input 8
|
||||
|
||||
add_interface asmi_epcs_id conduit end
|
||||
add_interface_port asmi_epcs_id asmi_epcs_id conduit_epcs_id Input 8
|
||||
|
||||
add_interface asmi_illegal_erase conduit end
|
||||
add_interface_port asmi_illegal_erase asmi_illegal_erase conduit_illegal_erase Input 1
|
||||
|
||||
add_interface asmi_illegal_write conduit end
|
||||
add_interface_port asmi_illegal_write asmi_illegal_write conduit_illegal_write Input 1
|
||||
|
||||
add_interface ddasi_dataoe conduit end
|
||||
add_interface_port ddasi_dataoe ddasi_dataoe conduit_ddasi_dataoe Input ASI_WIDTH
|
||||
|
||||
add_interface ddasi_dclk conduit end
|
||||
add_interface_port ddasi_dclk ddasi_dclk conduit_ddasi_dclk Input 1
|
||||
|
||||
add_interface ddasi_scein conduit end
|
||||
add_interface_port ddasi_scein ddasi_scein conduit_ddasi_scein Input CS_WIDTH
|
||||
|
||||
add_interface ddasi_sdoin conduit end
|
||||
add_interface_port ddasi_sdoin ddasi_sdoin conduit_ddasi_sdoin Input ASI_WIDTH
|
||||
|
||||
add_interface asmi_busy conduit end
|
||||
add_interface_port asmi_busy asmi_busy conduit_busy Input 1
|
||||
|
||||
add_interface asmi_data_valid conduit end
|
||||
add_interface_port asmi_data_valid asmi_data_valid conduit_data_valid Input 1
|
||||
|
||||
add_interface asmi_dataout conduit end
|
||||
add_interface_port asmi_dataout asmi_dataout conduit_dataout Input 8
|
||||
|
||||
add_interface epcq_dataout conduit end
|
||||
add_interface_port epcq_dataout epcq_dataout conduit_epcq_dataout Input ASI_WIDTH
|
||||
|
||||
add_interface ddasi_dataout conduit end
|
||||
add_interface_port ddasi_dataout ddasi_dataout conduit_ddasi_dataout Output ASI_WIDTH
|
||||
|
||||
add_interface asmi_read_rdid conduit end
|
||||
add_interface_port asmi_read_rdid asmi_read_rdid conduit_read_rdid Output 1
|
||||
|
||||
add_interface asmi_read_status conduit end
|
||||
add_interface_port asmi_read_status asmi_read_status conduit_read_status Output 1
|
||||
|
||||
add_interface asmi_read_sid conduit end
|
||||
add_interface_port asmi_read_sid asmi_read_sid conduit_read_sid Output 1
|
||||
|
||||
add_interface asmi_bulk_erase conduit end
|
||||
add_interface_port asmi_bulk_erase asmi_bulk_erase conduit_bulk_erase Output 1
|
||||
|
||||
add_interface asmi_sector_erase conduit end
|
||||
add_interface_port asmi_sector_erase asmi_sector_erase conduit_sector_erase Output 1
|
||||
|
||||
add_interface asmi_sector_protect conduit end
|
||||
add_interface_port asmi_sector_protect asmi_sector_protect conduit_sector_protect Output 1
|
||||
|
||||
add_interface epcq_dclk conduit end
|
||||
add_interface_port epcq_dclk epcq_dclk conduit_epcq_dclk Output 1
|
||||
|
||||
add_interface epcq_scein conduit end
|
||||
add_interface_port epcq_scein epcq_scein conduit_epcq_scein Output CS_WIDTH
|
||||
|
||||
add_interface epcq_sdoin conduit end
|
||||
add_interface_port epcq_sdoin epcq_sdoin conduit_epcq_sdoin Output ASI_WIDTH
|
||||
|
||||
add_interface epcq_dataoe conduit end
|
||||
add_interface_port epcq_dataoe epcq_dataoe conduit_epcq_dataoe Output ASI_WIDTH
|
||||
|
||||
add_interface asmi_clkin conduit end
|
||||
add_interface_port asmi_clkin asmi_clkin conduit_clkin Output 1
|
||||
|
||||
add_interface asmi_reset conduit end
|
||||
add_interface_port asmi_reset asmi_reset conduit_reset Output 1
|
||||
|
||||
add_interface asmi_sce conduit end
|
||||
add_interface_port asmi_sce asmi_sce conduit_asmi_sce Output CS_WIDTH
|
||||
|
||||
add_interface asmi_addr conduit end
|
||||
add_interface_port asmi_addr asmi_addr conduit_addr Output ASMI_ADDR_WIDTH
|
||||
|
||||
add_interface asmi_datain conduit end
|
||||
add_interface_port asmi_datain asmi_datain conduit_datain Output 8
|
||||
|
||||
add_interface asmi_fast_read conduit end
|
||||
add_interface_port asmi_fast_read asmi_fast_read conduit_fast_read Output 1
|
||||
|
||||
add_interface asmi_rden conduit end
|
||||
add_interface_port asmi_rden asmi_rden conduit_rden Output 1
|
||||
|
||||
add_interface asmi_shift_bytes conduit end
|
||||
add_interface_port asmi_shift_bytes asmi_shift_bytes conduit_shift_bytes Output 1
|
||||
|
||||
add_interface asmi_wren conduit end
|
||||
add_interface_port asmi_wren asmi_wren conduit_wren Output 1
|
||||
|
||||
add_interface asmi_write conduit end
|
||||
add_interface_port asmi_write asmi_write conduit_write Output 1
|
||||
|
||||
add_interface asmi_rdid_out conduit end
|
||||
add_interface_port asmi_rdid_out asmi_rdid_out conduit_rdid_out Input 8
|
||||
|
||||
add_interface asmi_en4b_addr conduit end
|
||||
add_interface_port asmi_en4b_addr asmi_en4b_addr conduit_en4b_addr Output 1
|
||||
|
||||
#
|
||||
# connection point interrupt_sender
|
||||
#
|
||||
add_interface interrupt_sender interrupt end
|
||||
set_interface_property interrupt_sender associatedAddressablePoint avl_csr
|
||||
set_interface_property interrupt_sender associatedClock clock_sink
|
||||
set_interface_property interrupt_sender associatedReset reset
|
||||
set_interface_property interrupt_sender bridgedReceiverOffset ""
|
||||
set_interface_property interrupt_sender bridgesToReceiver ""
|
||||
set_interface_property interrupt_sender ENABLED true
|
||||
set_interface_property interrupt_sender EXPORT_OF ""
|
||||
set_interface_property interrupt_sender PORT_NAME_MAP ""
|
||||
set_interface_property interrupt_sender CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property interrupt_sender SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port interrupt_sender irq irq Output 1
|
||||
|
||||
proc validate {} {
|
||||
set all_supported_SPI_list {"EPCS16" "EPCS64" "EPCS128" "EPCQ16" "EPCQ32" "EPCQ64" "EPCQ128" "EPCQ256" \
|
||||