|
|
// © IBM Corp. 2021
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by the terms below; you may not use the files in this
|
|
|
// repository except in compliance with the License as modified.
|
|
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
|
//
|
|
|
// Modified Terms:
|
|
|
//
|
|
|
// 1) For the purpose of the patent license granted to you in Section 3 of the License, the "Work" hereby includes implementations of
|
|
|
// the work of authorship in physical form.
|
|
|
//
|
|
|
// Unless required by applicable law or agreed to in writing, the reference design distributed under the License is distributed on an
|
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
|
|
|
// governing permissions and limitations under the License.
|
|
|
//
|
|
|
// Brief explanation of modifications:
|
|
|
//
|
|
|
// Modification 1: This modification extends the patent license to an implementation of the Work in physical form – i.e.,
|
|
|
// it unambiguously permits a user to make and use the physical chip.
|
|
|
|
|
|
`timescale 1 ns / 1 ns
|
|
|
|
|
|
`include "../toysram.vh"
|
|
|
|
|
|
// control macro
|
|
|
// does stuff
|
|
|
|
|
|
module control (
|
|
|
`ifdef USE_POWER_PINS
|
|
|
inout vccd1,
|
|
|
inout vssd1,
|
|
|
`endif
|
|
|
input clk,
|
|
|
input rst,
|
|
|
|
|
|
input [`MPRJ_IO_PADS-1:0] io_in,
|
|
|
output [`MPRJ_IO_PADS-1:0] io_out,
|
|
|
output [`MPRJ_IO_PADS-1:0] io_oeb,
|
|
|
|
|
|
input ctl_cmd_val,
|
|
|
input ra0_cmd_val,
|
|
|
input [31:0] cmd_adr,
|
|
|
input cmd_we,
|
|
|
input [3:0] cmd_sel,
|
|
|
input [31:0] cmd_dat,
|
|
|
output rd_ack,
|
|
|
output [31:0] rd_dat,
|
|
|
|
|
|
output ra0_clk,
|
|
|
output ra0_rst,
|
|
|
output ra0_cfg_wr,
|
|
|
input [31:0] ra0_cfg_rdat,
|
|
|
output [31:0] ra0_cfg_wdat,
|
|
|
output [31:0] ra0_bist_ctl,
|
|
|
input [31:0] ra0_bist_status,
|
|
|
output ra0_r0_enb,
|
|
|
output [4:0] ra0_r0_adr,
|
|
|
input [31:0] ra0_r0_dat,
|
|
|
output ra0_r1_enb,
|
|
|
output [4:0] ra0_r1_adr,
|
|
|
input [31:0] ra0_r1_dat,
|
|
|
output ra0_w0_enb,
|
|
|
output [4:0] ra0_w0_adr,
|
|
|
output [31:0] ra0_w0_dat
|
|
|
|
|
|
);
|
|
|
|
|
|
reg [31:0] cfg0_q;
|
|
|
wire [31:0] cfg0_d;
|
|
|
reg [4:0] seq_q;
|
|
|
wire [4:0] seq_d;
|
|
|
reg [2:0] rd_wait_q;
|
|
|
wire [2:0] rd_wait_d;
|
|
|
reg [127:0] scan_reg_q;
|
|
|
wire [127:0] scan_reg_d;
|
|
|
|
|
|
wire adr_cfg0;
|
|
|
wire [31:0] cfg0_wrdata;
|
|
|
wire adr_bist;
|
|
|
wire adr_config;
|
|
|
wire special;
|
|
|
wire [1:0] wr_type;
|
|
|
wire ra0_bist_rd;
|
|
|
wire rd_start;
|
|
|
wire [1:0] rd_type;
|
|
|
wire [2:0] rdata_sel;
|
|
|
wire rd_data;
|
|
|
|
|
|
wire test_enable;
|
|
|
wire scan_clk;
|
|
|
wire scan_di;
|
|
|
wire scan_do;
|
|
|
wire [16:0] scan_config;
|
|
|
wire io_ra0_clk;
|
|
|
wire io_ra0_rst;
|
|
|
wire io_ra0_r0_enb;
|
|
|
wire io_ra0_r1_enb;
|
|
|
wire io_ra0_w0_enb;
|
|
|
wire [4:0] io_ra0_r0_adr;
|
|
|
wire [4:0] io_ra0_r1_adr;
|
|
|
wire [4:0] io_ra0_w0_adr;
|
|
|
wire [31:0] io_ra0_w0_dat;
|
|
|
|
|
|
// FF
|
|
|
always @(posedge clk) begin
|
|
|
if (rst) begin
|
|
|
seq_q <= 'hFF;
|
|
|
cfg0_q <= `CFG0_INIT;
|
|
|
rd_wait_q <= 0;
|
|
|
end else begin
|
|
|
seq_q <= seq_d;
|
|
|
cfg0_q <= cfg0_d;
|
|
|
rd_wait_q <= rd_wait_d;
|
|
|
end
|
|
|
end
|
|
|
|
|
|
always @(posedge scan_clk) begin
|
|
|
begin
|
|
|
if (test_enable == 'b1) begin
|
|
|
scan_reg_q <= {scan_reg_q[126:0], scan_di};
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
always @(posedge io_ra0_clk) begin
|
|
|
if (test_enable == 'b1) begin
|
|
|
scan_reg_q[122:91] <= {ra0_r0_dat};
|
|
|
scan_reg_q[85:54] <= {ra0_r1_dat};
|
|
|
end
|
|
|
end
|
|
|
|
|
|
// GPIO
|
|
|
//
|
|
|
// Scan Controls
|
|
|
// test enable
|
|
|
// scan_clk
|
|
|
// scan_di
|
|
|
// scan_do
|
|
|
//
|
|
|
// Scan Config
|
|
|
// * have a way to single-step on-chip clk so can use it plus scan?
|
|
|
//
|
|
|
// Array Controls
|
|
|
// ra_clk
|
|
|
// ra_rst
|
|
|
// ra_r0_enb
|
|
|
// ra_r1_enb
|
|
|
// ra_w0_enb
|
|
|
//
|
|
|
// Scannable RA0 Reg
|
|
|
// ra0_r0_adr
|
|
|
// ra0_r0_dat
|
|
|
// ra0_r1_adr
|
|
|
// ra0_r1_dat
|
|
|
// ra0_w0_adr
|
|
|
// ra0_w0_dat
|
|
|
//
|
|
|
// Array Read/Write
|
|
|
// 1. scan in adr/dat reg
|
|
|
// 2. activate ra_clk and ra_xx_enb for port control (n cycles)
|
|
|
// 3. scan out adr/dat reg
|
|
|
//
|
|
|
// Scan Logic
|
|
|
// * have control bit(s) to load logic config, array config, bist, whatever from scan_reg
|
|
|
// after it's loaded
|
|
|
// * there are 17 unused bits left in scan_reg also
|
|
|
|
|
|
// ins
|
|
|
assign test_enable = io_in[`PIN_TE];
|
|
|
assign scan_clk = io_in[`PIN_SCAN_CLK];
|
|
|
assign scan_di = io_in[`PIN_SCAN_IN];
|
|
|
|
|
|
assign io_ra0_clk = io_in[`PIN_RA0_CLK];
|
|
|
assign io_ra0_rst = io_in[`PIN_RA0_RST];
|
|
|
assign io_ra0_r0_enb = io_in[`PIN_RA0_R0_EN];
|
|
|
assign io_ra0_r1_enb = io_in[`PIN_RA0_R1_EN];
|
|
|
assign io_ra0_w0_enb = io_in[`PIN_RA0_W0_EN];
|
|
|
|
|
|
// outs
|
|
|
assign io_out[`PIN_SCAN_OUT] = scan_do;
|
|
|
assign io_out[`PIN_RUNMODE] = cfg0_q[31];
|
|
|
assign io_out[`PIN_ERROR] = cfg0_q[30];
|
|
|
assign io_out[`PIN_USER_1] = cfg0_q[29];
|
|
|
assign io_out[`PIN_USER_0] = cfg0_q[28];
|
|
|
assign io_oeb = `PINS_OEB; //wtf do you need to do this anymore? or core does it???
|
|
|
|
|
|
assign io_ra0_r0_adr = scan_reg_q[127:123];
|
|
|
//assign io_ra0_r0_dat = scan_reg_q[122:91]; // loaded by io_ra0_clk
|
|
|
assign io_ra0_r1_adr = scan_reg_q[90:86];
|
|
|
//assign io_ra0_r1_dat = scan_reg_q[85:54]; // loaded by io_ra0_clk
|
|
|
assign io_ra0_w0_adr = scan_reg_q[53:49];
|
|
|
assign io_ra0_w0_dat = scan_reg_q[48:17];
|
|
|
|
|
|
assign scan_config = scan_reg_q[16:0];
|
|
|
assign scan_do = scan_reg_q[127];
|
|
|
|
|
|
// Internal Routing
|
|
|
|
|
|
// CFG0
|
|
|
// 31 Run Mode
|
|
|
// 30 Error
|
|
|
// 29:28 User Outputs [1:0]
|
|
|
// 27:03 Reserved
|
|
|
// 02:00 Read Data Wait Cycles (after cmd cycle)
|
|
|
|
|
|
assign wr_type = cmd_adr[3:2];
|
|
|
assign adr_cfg0 = ctl_cmd_val & ((cmd_adr & `CFG_MASK) == `CFG0_OFFSET);
|
|
|
assign cfg0_wrdata = wr_type == 2'b00 ? cmd_dat :
|
|
|
wr_type == 2'b01 ? cmd_dat | cfg0_q :
|
|
|
wr_type == 2'b10 ? ~cmd_dat & cfg0_q :
|
|
|
cmd_dat ^ cfg0_q;
|
|
|
assign cfg0_d = cmd_we & adr_cfg0 ? cfg0_wrdata : cfg0_q;
|
|
|
|
|
|
// Array Routing
|
|
|
|
|
|
assign adr_bist = ra0_cmd_val & ((cmd_adr & `CFG_MASK) == `BIST_OFFSET);
|
|
|
assign adr_config = ra0_cmd_val & ((cmd_adr & `CFG_MASK) == `CFG_OFFSET);
|
|
|
assign special = adr_bist | adr_config;
|
|
|
|
|
|
assign ra0_bist_ctl = cmd_we & adr_bist ? cmd_dat : 'h00000000;
|
|
|
assign ra0_bist_rd = adr_bist & ~cmd_we;
|
|
|
assign ra0_cfg_wr = cmd_we & adr_config;
|
|
|
assign ra0_cfg_wdat = cmd_dat;
|
|
|
|
|
|
// reads can use r0, r1, or both; if both, return either both hi or both lo data
|
|
|
//wtf probs should be a way to do all r+w
|
|
|
// need a data reg for reads or writes or both
|
|
|
// 1. write data/addr reg, then do a rdtype + extra bit to indicate write from special
|
|
|
// 2. do write + wrtype (00:no read, 01:r0, 10:r1, 11:r01), latch rd port data; if do this, use them for all
|
|
|
// reads, which then enables R0/R1 read to see all bits by reading the data regs; but this requires
|
|
|
// r0,r1,w0 all on addr bus concurrently (type(2), r0(5), r1(5), w0(5) for 32 entries)
|
|
|
// mpw7 supports slave space of 24 bits; some are the local address routing (2-3) but depends on number of arrays
|
|
|
|
|
|
assign rd_type = cmd_adr[15:14]; // port addr 14 bits
|
|
|
|
|
|
// or send test_enable and test_clk/rst to array
|
|
|
assign ra0_clk = test_enable ? io_ra0_clk : clk;
|
|
|
assign ra0_rst = test_enable ? io_ra0_rst : rst;
|
|
|
|
|
|
assign ra0_r0_enb = test_enable ? io_ra0_r0_enb : ra0_cmd_val & ~special & ~cmd_we & (rd_type[1] | ~rd_type[0]);
|
|
|
assign ra0_r1_enb = test_enable ? io_ra0_r1_enb : ra0_cmd_val & ~special & ~cmd_we & (rd_type[1] | rd_type[0]);
|
|
|
assign ra0_r0_adr = test_enable ? io_ra0_r0_adr : cmd_adr[6:2]; // adr=row
|
|
|
// don't confuse programmers and change fields...
|
|
|
//assign ra0_r1_adr = test_enable ? io_ra0_r1_adr : rd_type == 'b01 ? cmd_adr[6:2] : cmd_adr[13:8]; // adr=row
|
|
|
assign ra0_r1_adr = test_enable ? io_ra0_r1_adr : cmd_adr[13:8]; // adr=row
|
|
|
assign ra0_w0_enb = test_enable ? io_ra0_w0_enb : ra0_cmd_val & cmd_we & |cmd_sel; // sel=port
|
|
|
assign ra0_w0_adr = test_enable ? io_ra0_w0_adr : cmd_adr[6:2]; // adr=row
|
|
|
assign ra0_w0_dat = test_enable ? io_ra0_w0_dat : cmd_dat; //
|
|
|
|
|
|
// Command Sequencer
|
|
|
// rd_data in 1+ cycs; all reads use same timing
|
|
|
// writes are ack'd by wb_slave immediately
|
|
|
|
|
|
//tbl cmdseq
|
|
|
//n seq_q seq_d
|
|
|
//n | ctl_cmd_val | rd_start
|
|
|
//n | |ra0_cmd_val | | rd_ack
|
|
|
//n | ||cmd_we | | | rdata_sel
|
|
|
//n | ||| rd_type | | | |
|
|
|
//n | ||| | adr_bist | | | |
|
|
|
//n | ||| | |adr_config | | | |
|
|
|
//n | ||| | || rd_data | | | |
|
|
|
//n | ||| | || | | | | |
|
|
|
//n | ||| | || | | | | |
|
|
|
//n | ||| | || | | | | |
|
|
|
//b 43210 ||| 10 || | 43210 | | 210
|
|
|
//t iiiii iii ii ii i ooooo o o ooo
|
|
|
//*------------------------------------------------
|
|
|
//* Idle ******************************************
|
|
|
//s 11111 00- -- -- - 11111 0 0 000 * ...zzz..zzzzz....
|
|
|
//s 11111 1-1 -- -- - 11111 0 0 000 * write ctl
|
|
|
//s 11111 -11 -- -- - 11111 0 0 000 * write ra
|
|
|
//s 11111 1-0 -- 00 - 00001 1 0 000 * rd ctl cfg
|
|
|
//s 11111 1-0 -- 1- - 00010 1 0 000 * rd bist
|
|
|
//s 11111 1-0 -- -1 - 00011 1 0 000 * rd cfg
|
|
|
//s 11111 -10 00 -- - 00100 1 0 000 * rd r0
|
|
|
//s 11111 -10 01 -- - 00101 1 0 000 * rd r1
|
|
|
//s 11111 -10 10 -- - 00110 1 0 000 * rd r0+r1 lo
|
|
|
//s 11111 -10 11 -- - 00111 1 0 000 * rd r0_r1 hi
|
|
|
//* Read CTL **************************************
|
|
|
//s 00001 --- -- -- 0 00001 0 0 100
|
|
|
//s 00001 --- -- -- 1 11111 0 1 100
|
|
|
//* Read BIST *************************************
|
|
|
//s 00010 --- -- -- 0 00010 0 0 101
|
|
|
//s 00010 --- -- -- 1 11111 0 1 101
|
|
|
//* Read CFG **************************************
|
|
|
//s 00011 --- -- -- 0 00011 0 0 110
|
|
|
//s 00011 --- -- -- 1 11111 0 1 110
|
|
|
//* Read R0 ***************************************
|
|
|
//s 00100 --- -- -- 0 00100 0 0 000
|
|
|
//s 00100 --- -- -- 1 11111 0 1 000
|
|
|
//* Read R1 ***************************************
|
|
|
//s 00101 --- -- -- 0 00101 0 0 001
|
|
|
//s 00101 --- -- -- 1 11111 0 1 001
|
|
|
//* Read R0+R1 Lo *********************************
|
|
|
//s 00110 --- -- -- 0 00110 0 0 010
|
|
|
//s 00110 --- -- -- 1 11111 0 1 010
|
|
|
//* Read R0+R1 Hi *********************************
|
|
|
//s 00111 --- -- -- 0 00111 0 0 011
|
|
|
//s 00111 --- -- -- 1 11111 0 1 011
|
|
|
|
|
|
//*------------------------------------------------
|
|
|
//tbl cmdseq_d
|
|
|
|
|
|
// use same timing for ra accesses and others
|
|
|
assign rd_wait_d = rd_start ? cfg0_q[2:0] :
|
|
|
(rd_wait_q != 0) ? rd_wait_q - 1 :
|
|
|
rd_wait_q;
|
|
|
|
|
|
assign rd_data = rd_wait_q == 0;
|
|
|
|
|
|
assign rd_dat = rdata_sel == 'b000 ? ra0_r0_dat :
|
|
|
rdata_sel == 'b001 ? ra0_r1_dat :
|
|
|
rdata_sel == 'b010 ? {ra0_r1_dat[15:0],ra0_r0_dat[15:0]} :
|
|
|
rdata_sel == 'b011 ? {ra0_r1_dat[31:16],ra0_r0_dat[31:16]} :
|
|
|
rdata_sel == 'b100 ? cfg0_q :
|
|
|
rdata_sel == 'b101 ? ra0_bist_status :
|
|
|
rdata_sel == 'b110 ? ra0_cfg_rdat :
|
|
|
'hFFFFFFFF;
|
|
|
|
|
|
// Generated...
|
|
|
//vtable cmdseq
|
|
|
assign seq_d[4] =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~ctl_cmd_val & ~ra0_cmd_val) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & cmd_we) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign seq_d[3] =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~ctl_cmd_val & ~ra0_cmd_val) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & cmd_we) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign seq_d[2] =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~ctl_cmd_val & ~ra0_cmd_val) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & ~rd_type[1] & ~rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & ~rd_type[1] & rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & ~rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & rd_type[0]) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign seq_d[1] =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~ctl_cmd_val & ~ra0_cmd_val) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & adr_bist) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & adr_config) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & ~rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & rd_type[0]) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign seq_d[0] =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~ctl_cmd_val & ~ra0_cmd_val) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & cmd_we) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & ~adr_bist & ~adr_config) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & adr_config) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & ~rd_type[1] & rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & rd_type[0]) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign rd_start =
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & ~adr_bist & ~adr_config) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & adr_bist) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ctl_cmd_val & ~cmd_we & adr_config) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & ~rd_type[1] & ~rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & ~rd_type[1] & rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & ~rd_type[0]) |
|
|
|
(seq_q[4] & seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ra0_cmd_val & ~cmd_we & rd_type[1] & rd_type[0]);
|
|
|
assign rd_ack =
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign rdata_sel[2] =
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign rdata_sel[1] =
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
assign rdata_sel[0] =
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & ~seq_q[2] & seq_q[1] & ~seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & ~seq_q[1] & seq_q[0] & rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & ~rd_data) |
|
|
|
(~seq_q[4] & ~seq_q[3] & seq_q[2] & seq_q[1] & seq_q[0] & rd_data);
|
|
|
//vtable cmdseq
|
|
|
|
|
|
endmodule
|