OpenCores
URL https://opencores.org/ocsvn/neural_net_perceptron/neural_net_perceptron/trunk

Subversion Repositories neural_net_perceptron

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 7 to Rev 8
    Reverse comparison

Rev 7 → Rev 8

/neural_net_perceptron/trunk/neural_net_perceptron/doc/specification_NN_Perceptron_v01_20220720.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
neural_net_perceptron/trunk/neural_net_perceptron/doc/specification_NN_Perceptron_v01_20220720.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/memory_vhd_v03_pkg.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/memory_vhd_v03_pkg.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/memory_vhd_v03_pkg.vhd (revision 8) @@ -0,0 +1,190 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- Created: 24-02-2022 13:24:00 +-- +----------------------------------------------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY work; + +PACKAGE memory_vhd_v03_pkg IS + + -- /////////////////\\\\\\\\\\\\\\\\\\\ + -- ************************************ + -- *** User Settings *** + -- ************************************ + + -- Wishbone Bus + CONSTANT WB_DATA_WIDTH : integer := 32; -- Wishbone Data Bus width + CONSTANT WB_ADDR_WIDTH : integer := 5; -- Wishbone Address Bus width + + CONSTANT VENDOR : string := "generic"; -- (generic, altera, xilinx) + -- NOT IMPLEMENTED YET + + -- Bus width (DATA_T) of all memories (all are equal) + -- Chose a value high enough to hold all possible values cumulated in + -- y_inj_reg, + -- Memory t, + -- Memory bias, + -- Memory w + CONSTANT DATA_WIDTH : integer := 8; + + -- Address width of s input vector memory (maximum number of components/inputs = 2**MEM_S_ADDR_WIDTH) + CONSTANT MEM_S_ADDR_WIDTH : integer := 3; -- = 8 + + -- Address width of t output vector memory (maximum number of neurons/outputs = 2**MEM_T_ADDR_WIDTH) + CONSTANT MEM_T_ADDR_WIDTH : integer := 2; -- = 4 + -- /////////////////\\\\\\\\\\\\\\\\\\\ + -- /////////////////\\\\\\\\\\\\\\\\\\\ + + + + -- ************************************ + -- *** System Constants *** + -- *** DO NOT CHANGE *** + -- ************************************ + -- Number of maximum usable components/inputs - 1 + CONSTANT I_MAX : integer := ( 2 ** MEM_S_ADDR_WIDTH ) - 1; + -- Number of maximum usable neurons/outputs - 1 + CONSTANT J_MAX : integer := ( 2 ** MEM_T_ADDR_WIDTH ) - 1; + + -- Width of Memory Latency counter (mem_rd_lat_reg) + CONSTANT MEM_LAT_CNT_WIDTH : integer := 7; -- At least 3 bits width -> latency 0...2 + -- Value to reach for leaving counting loops + CONSTANT MEM_LAT_CNT_TRANSITION : integer := ( 2 ** MEM_LAT_CNT_WIDTH ) - 1; + + -- Number of memory write lines (to build up the RD/WR vector + CONSTANT MEM_WR_LINES : integer := 5; + CONSTANT MEM_S_BITPOS : integer := MEM_WR_LINES - 5; + CONSTANT MEM_T_BITPOS : integer := MEM_WR_LINES - 4; + CONSTANT MEM_W_BITPOS : integer := MEM_WR_LINES - 3; + CONSTANT MEM_Y_BITPOS : integer := MEM_WR_LINES - 2; + CONSTANT MEM_BIAS_BITPOS : integer := MEM_WR_LINES - 1; + + -- Status READY FOR COMMANDS bit position + CONSTANT STAT_RDY : integer := 0; + -- Status Latency Messurement in progress + CONSTANT STAT_LAT_RUN : integer := 1; + -- Status Controller is NOT ready -> RESET (while start of function TRAIN) + CONSTANT STAT_NOT_RDY : integer := 2; + -- Status Interrupt Enable + CONSTANT STAT_INT_EN : integer := 3; + -- Status Memory Error + CONSTANT STAT_MEMERR : integer := 4; + -- Status DATA OUTPUT READY bit position + CONSTANT STAT_RD_WR_COMPLETE : integer := 5; + -- Status Interrupt TEST pending + CONSTANT STAT_INT_TEST : integer := 6; + -- Status Interrupt TRAIN pending + CONSTANT STAT_INT_TRAIN : integer := 7; + + + -- Calculate all memory address widths and other dependencies + -- s input memory depth + CONSTANT MEM_S_DEPTH : integer := ( 2**MEM_S_ADDR_WIDTH ) - 1; + -- t output memory depth + CONSTANT MEM_T_DEPTH : integer := ( 2**MEM_T_ADDR_WIDTH ) - 1; + -- w (weights) memory address width calculation + CONSTANT MEM_W_ADDR_WIDTH : integer := MEM_S_ADDR_WIDTH + MEM_T_ADDR_WIDTH; + -- w (weights) memory depths calculation + CONSTANT MEM_W_DEPTH : integer := ( 2**MEM_W_ADDR_WIDTH ) - 1; + + -- ************************************ + -- Wishbone Address Map + CONSTANT WB_STAT_A : integer := 0; -- + CONSTANT WB_THRES : integer := 1; -- + CONSTANT WB_BIAS : integer := 2; -- + CONSTANT WB_OFFSET : integer := 3; -- + CONSTANT WB_MAXEPOCH : integer := 4; -- + CONSTANT WB_UNUSED_X05 : integer := 5; -- DO NOT USE, for feature use + CONSTANT WB_UNUSED_X06 : integer := 6; -- DO NOT USE, for feature use + CONSTANT WB_STARTI : integer := 7; -- + CONSTANT WB_STOPI : integer := 8; -- + CONSTANT WB_STARTJ : integer := 9; -- + + CONSTANT WB_STOPJ : integer := 10; -- + CONSTANT WB_EPOCH : integer := 11; -- + CONSTANT WB_WRLAT : integer := 12; -- + CONSTANT WB_RDLAT : integer := 13; -- + CONSTANT WB_ALLLAT : integer := 14; -- + CONSTANT WB_START3 : integer := 15; -- + CONSTANT WB_START4 : integer := 16; -- + CONSTANT WB_START5_S : integer := 17; -- + CONSTANT WB_START5_T : integer := 18; -- + CONSTANT WB_START5_W : integer := 19; -- + + CONSTANT WB_START5_Y : integer := 20; -- + CONSTANT WB_START5_BIAS : integer := 21; -- + CONSTANT WB_START6 : integer := 22; -- + CONSTANT WB_IMAX : integer := 23; -- + CONSTANT WB_JMAX : integer := 24; -- + CONSTANT WB_MEMDATA_WIDTH : integer := 25; -- + -- ************************************ + + -- ************************************ + -- *** Type Definitions *** + -- ************************************ + -- Wishbone data and address types + SUBTYPE WB_DATA_WIDTH_T IS std_logic_vector ( WB_DATA_WIDTH-1 downto 0 ); + SUBTYPE WB_ADDR_WIDTH_T IS std_logic_vector ( WB_ADDR_WIDTH-1 downto 0 ); + + -- Data bus type for all memories + SUBTYPE DATA_T IS std_logic_vector ( DATA_WIDTH-1 downto 0 ); + SUBTYPE DATA_N IS integer range DATA_WIDTH-1 downto 0; + + -- Memory Latency counter type + SUBTYPE MEM_LAT_CNT_WIDTH_T IS std_logic_vector ( MEM_LAT_CNT_WIDTH-1 downto 0 ); + -- Vector bus to select memory RD or WR + SUBTYPE MEM_WR_LINES_T IS std_logic_vector ( MEM_WR_LINES-1 downto 0 ); + + -- Declare the types for all memory address busses + -- s input memory + SUBTYPE ADDRESS_S_T IS std_logic_vector ( MEM_S_ADDR_WIDTH-1 downto 0 ); + SUBTYPE ADDRESS_S_N IS integer range MEM_S_ADDR_WIDTH-1 downto 0; + SUBTYPE ADDRESS_S_ZERO_T IS std_logic_vector ( MEM_S_ADDR_WIDTH-1 downto 1 ); + -- t input/output memory + SUBTYPE ADDRESS_T_T IS std_logic_vector ( MEM_T_ADDR_WIDTH-1 downto 0 ); + SUBTYPE ADDRESS_T_N IS integer range MEM_T_ADDR_WIDTH-1 downto 0; + SUBTYPE ADDRESS_T_ZERO_T IS std_logic_vector ( MEM_T_ADDR_WIDTH-1 downto 1 ); + -- w (weigths) memory + SUBTYPE ADDRESS_W_T IS std_logic_vector ( MEM_W_ADDR_WIDTH-1 downto 0 ); + + -- Declare the types for all memory arrays + -- s input memory + TYPE S_RAM_T IS ARRAY ( MEM_S_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 ); + -- t output memory + TYPE T_RAM_T IS ARRAY ( MEM_T_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 ); + -- w (weights) memory + TYPE W_RAM_T IS ARRAY ( MEM_W_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 ); + -- ************************************ + + SUBTYPE SIM_STATE_T IS integer; + + CONSTANT ST0 : SIM_STATE_T := 0; + CONSTANT INIT : SIM_STATE_T := 1; + CONSTANT WR1 : SIM_STATE_T := 2; + CONSTANT WR_13_BURST : SIM_STATE_T := 3; + CONSTANT WR_13_END : SIM_STATE_T := 4; + CONSTANT WR_7_SINGLE : SIM_STATE_T := 5; + CONSTANT WR_7_END : SIM_STATE_T := 6; + CONSTANT ST7 : SIM_STATE_T := 7; + +END memory_vhd_v03_pkg; + + Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00000_s_v03_top_level_blk.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00000_s_v03_top_level_blk.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00000_s_v03_top_level_blk.vhd (revision 8) @@ -0,0 +1,270 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00000_s_v03_top_level_blk IS + PORT( + wb_adr_i : IN WB_ADDR_WIDTH_T; + wb_clk_i : IN std_logic; + wb_cyc_i : IN std_logic; + wb_dat_i : IN WB_DATA_WIDTH_T; + wb_rst_i : IN std_logic; + wb_stb_i : IN std_logic; + wb_we_i : IN std_logic; + ctrl_int_o : OUT std_logic; + wb_ack_o : OUT std_logic; + wb_dat_o : OUT WB_DATA_WIDTH_T + ); + +-- Declarations + +END p0300_m00000_s_v03_top_level_blk ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- +-- Revision 3.0 2022/07/04 +-- - Update wiring and connections +-- - Insert new versioned symbol of U_0 +-- Revision 2.0 2022/06/13 +-- - Insert new versioned symbol of U_0 +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + + +ARCHITECTURE struct OF p0300_m00000_s_v03_top_level_blk IS + + -- Architecture declarations + + -- Internal signal declarations + SIGNAL addr_i_oi : ADDRESS_S_T; + SIGNAL addr_j_oi : ADDRESS_T_T; + SIGNAL dbias_oi : DATA_T; + SIGNAL dout1_oi : DATA_T; + SIGNAL dout2_oi : DATA_T; + SIGNAL dout3_oi : DATA_T; + SIGNAL dout4_oi : DATA_T; + SIGNAL dout5_oi : DATA_T; + SIGNAL dout7_oi : DATA_T; + SIGNAL ds_oi : DATA_T; + SIGNAL dt_oi : DATA_T; + SIGNAL dw_oi : DATA_T; + SIGNAL dy_oi : DATA_T; + SIGNAL we_bias2_oi : std_logic; + SIGNAL we_bias3_oi : std_logic; + SIGNAL we_bias5_oi : std_logic; + SIGNAL we_s3_oi : std_logic; + SIGNAL we_s4_oi : std_logic; + SIGNAL we_s5_oi : std_logic; + SIGNAL we_t3_oi : std_logic; + SIGNAL we_t4_oi : std_logic; + SIGNAL we_t5_oi : std_logic; + SIGNAL we_w2_oi : std_logic; + SIGNAL we_w3_oi : std_logic; + SIGNAL we_w4_oi : std_logic; + SIGNAL we_w5_oi : std_logic; + SIGNAL we_w7_oi : std_logic; + SIGNAL we_y1_oi : std_logic; + SIGNAL we_y3_oi : std_logic; + SIGNAL we_y5_oi : std_logic; + + + -- Component Declarations + COMPONENT p0300_m00020_s_v03_perceptron_blk + PORT ( + clk_i : IN std_logic ; + dbias_i : IN DATA_T ; + ds_i : IN DATA_T ; + dt_i : IN DATA_T ; + dw_i : IN DATA_T ; + dy_i : IN DATA_T ; + rst_i : IN std_logic ; + wb_adr_i : IN WB_ADDR_WIDTH_T ; + wb_cyc_i : IN std_logic ; + wb_dat_i : IN WB_DATA_WIDTH_T ; + wb_stb_i : IN std_logic ; + wb_we_i : IN std_logic ; + addr_i_o : OUT ADDRESS_S_T ; + addr_j_o : OUT ADDRESS_T_T ; + ctrl_int_o : OUT std_logic ; + dout1_o : OUT DATA_T ; + dout2_o : OUT DATA_T ; + dout3_o : OUT DATA_T ; + dout4_o : OUT DATA_T ; + dout5_o : OUT DATA_T ; + dout7_o : OUT DATA_T ; + wb_ack_o : OUT std_logic ; + wb_dat_o : OUT WB_DATA_WIDTH_T ; + we_bias2_o : OUT std_logic ; + we_bias3_o : OUT std_logic ; + we_bias5_o : OUT std_logic ; + we_s3_o : OUT std_logic ; + we_s4_o : OUT std_logic ; + we_s5_o : OUT std_logic ; + we_t3_o : OUT std_logic ; + we_t4_o : OUT std_logic ; + we_t5_o : OUT std_logic ; + we_w2_o : OUT std_logic ; + we_w3_o : OUT std_logic ; + we_w4_o : OUT std_logic ; + we_w5_o : OUT std_logic ; + we_w7_o : OUT std_logic ; + we_y1_o : OUT std_logic ; + we_y3_o : OUT std_logic ; + we_y5_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00100_s_v01_mem_gen_blk + PORT ( + addr_i_i : IN ADDRESS_S_T ; + addr_j_i : IN ADDRESS_T_T ; + clk_i : IN std_logic ; + din1_i : IN DATA_T ; + din2_i : IN DATA_T ; + din3_i : IN DATA_T ; + din4_i : IN DATA_T ; + din5_i : IN DATA_T ; + din7_i : IN DATA_T ; + we_bias2_i : IN std_logic ; + we_bias3_i : IN std_logic ; + we_bias5_i : IN std_logic ; + we_s3_i : IN std_logic ; + we_s4_i : IN std_logic ; + we_s5_i : IN std_logic ; + we_t3_i : IN std_logic ; + we_t4_i : IN std_logic ; + we_t5_i : IN std_logic ; + we_w2_i : IN std_logic ; + we_w3_i : IN std_logic ; + we_w4_i : IN std_logic ; + we_w5_i : IN std_logic ; + we_w7_i : IN std_logic ; + we_y1_i : IN std_logic ; + we_y3_i : IN std_logic ; + we_y5_i : IN std_logic ; + dbias_o : OUT DATA_T ; + ds_o : OUT DATA_T ; + dt_o : OUT DATA_T ; + dw_o : OUT DATA_T ; + dy_o : OUT DATA_T + ); + END COMPONENT; + + -- Optional embedded configurations + -- pragma synthesis_off + FOR ALL : p0300_m00020_s_v03_perceptron_blk USE ENTITY work.p0300_m00020_s_v03_perceptron_blk; + FOR ALL : p0300_m00100_s_v01_mem_gen_blk USE ENTITY work.p0300_m00100_s_v01_mem_gen_blk; + -- pragma synthesis_on + + +BEGIN + + -- Instance port mappings. + U_0 : p0300_m00020_s_v03_perceptron_blk + PORT MAP ( + clk_i => wb_clk_i, + dbias_i => dbias_oi, + ds_i => ds_oi, + dt_i => dt_oi, + dw_i => dw_oi, + dy_i => dy_oi, + rst_i => wb_rst_i, + wb_adr_i => wb_adr_i, + wb_cyc_i => wb_cyc_i, + wb_dat_i => wb_dat_i, + wb_stb_i => wb_stb_i, + wb_we_i => wb_we_i, + addr_i_o => addr_i_oi, + addr_j_o => addr_j_oi, + ctrl_int_o => ctrl_int_o, + dout1_o => dout1_oi, + dout2_o => dout2_oi, + dout3_o => dout3_oi, + dout4_o => dout4_oi, + dout5_o => dout5_oi, + dout7_o => dout7_oi, + wb_ack_o => wb_ack_o, + wb_dat_o => wb_dat_o, + we_bias2_o => we_bias2_oi, + we_bias3_o => we_bias3_oi, + we_bias5_o => we_bias5_oi, + we_s3_o => we_s3_oi, + we_s4_o => we_s4_oi, + we_s5_o => we_s5_oi, + we_t3_o => we_t3_oi, + we_t4_o => we_t4_oi, + we_t5_o => we_t5_oi, + we_w2_o => we_w2_oi, + we_w3_o => we_w3_oi, + we_w4_o => we_w4_oi, + we_w5_o => we_w5_oi, + we_w7_o => we_w7_oi, + we_y1_o => we_y1_oi, + we_y3_o => we_y3_oi, + we_y5_o => we_y5_oi + ); + U_1 : p0300_m00100_s_v01_mem_gen_blk + PORT MAP ( + addr_i_i => addr_i_oi, + addr_j_i => addr_j_oi, + clk_i => wb_clk_i, + din1_i => dout1_oi, + din2_i => dout2_oi, + din3_i => dout3_oi, + din4_i => dout4_oi, + din5_i => dout5_oi, + din7_i => dout7_oi, + we_bias2_i => we_bias2_oi, + we_bias3_i => we_bias3_oi, + we_bias5_i => we_bias5_oi, + we_s3_i => we_s3_oi, + we_s4_i => we_s4_oi, + we_s5_i => we_s5_oi, + we_t3_i => we_t3_oi, + we_t4_i => we_t4_oi, + we_t5_i => we_t5_oi, + we_w2_i => we_w2_oi, + we_w3_i => we_w3_oi, + we_w4_i => we_w4_oi, + we_w5_i => we_w5_oi, + we_w7_i => we_w7_oi, + we_y1_i => we_y1_oi, + we_y3_i => we_y3_oi, + we_y5_i => we_y5_oi, + dbias_o => dbias_oi, + ds_o => ds_oi, + dt_o => dt_oi, + dw_o => dw_oi, + dy_o => dy_oi + ); + +END struct; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00020_s_v03_perceptron_blk.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00020_s_v03_perceptron_blk.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00020_s_v03_perceptron_blk.vhd (revision 8) @@ -0,0 +1,668 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00020_s_v03_perceptron_blk IS + PORT( + clk_i : IN std_logic; + dbias_i : IN DATA_T; + ds_i : IN DATA_T; + dt_i : IN DATA_T; + dw_i : IN DATA_T; + dy_i : IN DATA_T; + rst_i : IN std_logic; + wb_adr_i : IN WB_ADDR_WIDTH_T; + wb_cyc_i : IN std_logic; + wb_dat_i : IN WB_DATA_WIDTH_T; + wb_stb_i : IN std_logic; + wb_we_i : IN std_logic; + addr_i_o : OUT ADDRESS_S_T; + addr_j_o : OUT ADDRESS_T_T; + ctrl_int_o : OUT std_logic; + dout1_o : OUT DATA_T; + dout2_o : OUT DATA_T; + dout3_o : OUT DATA_T; + dout4_o : OUT DATA_T; + dout5_o : OUT DATA_T; + dout7_o : OUT DATA_T; + wb_ack_o : OUT std_logic; + wb_dat_o : OUT WB_DATA_WIDTH_T; + we_bias2_o : OUT std_logic; + we_bias3_o : OUT std_logic; + we_bias5_o : OUT std_logic; + we_s3_o : OUT std_logic; + we_s4_o : OUT std_logic; + we_s5_o : OUT std_logic; + we_t3_o : OUT std_logic; + we_t4_o : OUT std_logic; + we_t5_o : OUT std_logic; + we_w2_o : OUT std_logic; + we_w3_o : OUT std_logic; + we_w4_o : OUT std_logic; + we_w5_o : OUT std_logic; + we_w7_o : OUT std_logic; + we_y1_o : OUT std_logic; + we_y3_o : OUT std_logic; + we_y5_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00020_s_v03_perceptron_blk ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 3.0 2022/07/04 +-- - Update wiring and connections +-- - Insert all new versioned symbols +-- Revision 2.0 2022/06/18 +-- - Update wiring and connections +-- - Insert all new versioned symbols +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + + +ARCHITECTURE struct OF p0300_m00020_s_v03_perceptron_blk IS + + -- Architecture declarations + + -- Internal signal declarations + SIGNAL cnt_alllat_oi : MEM_LAT_CNT_WIDTH_T; + SIGNAL cnteni1_oi : std_logic; + SIGNAL cnteni2_oi : std_logic; + SIGNAL cnteni3_oi : std_logic; + SIGNAL cnteni4_oi : std_logic; + SIGNAL cnteni5_oi : std_logic; + SIGNAL cnteni7_oi : std_logic; + SIGNAL cntenj1_oi : std_logic; + SIGNAL cntenj2_oi : std_logic; + SIGNAL cntenj3_oi : std_logic; + SIGNAL cntenj4_oi : std_logic; + SIGNAL cntenj5_oi : std_logic; + SIGNAL cntenj7_oi : std_logic; + SIGNAL cnti_end_oi : std_logic; + SIGNAL cnti_rdy_oi : std_logic; + SIGNAL cntj_end_oi : std_logic; + SIGNAL cntj_rdy_oi : std_logic; + SIGNAL ctrl_bias_oi : DATA_T; + SIGNAL ctrl_clear_epoch_oi : std_logic; + SIGNAL ctrl_complete_oi : std_logic; + SIGNAL ctrl_din_oi : DATA_T; + SIGNAL ctrl_dout_oi : DATA_T; + SIGNAL ctrl_dout_valid_oi : std_logic; + SIGNAL ctrl_epoch_oi : WB_DATA_WIDTH_T; + SIGNAL ctrl_int4_o : std_logic; + SIGNAL ctrl_int6_o : std_logic; + SIGNAL ctrl_maxepoch_oi : WB_DATA_WIDTH_T; + SIGNAL ctrl_memerr_oi : std_logic; + SIGNAL ctrl_not_rdy6_oi : std_logic; + SIGNAL ctrl_offset_oi : DATA_T; + SIGNAL ctrl_rd_vec_oi : MEM_WR_LINES_T; + SIGNAL ctrl_rdlat_oi : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_rdy1_oi : std_logic; + SIGNAL ctrl_rdy2_oi : std_logic; + SIGNAL ctrl_rdy3_oi : std_logic; + SIGNAL ctrl_rdy4_oi : std_logic; + SIGNAL ctrl_rdy5_oi : std_logic; + SIGNAL ctrl_rdy6_oi : std_logic; + SIGNAL ctrl_rdy7_oi : std_logic; + SIGNAL ctrl_run7_oi : std_logic; + SIGNAL ctrl_start1_oi : std_logic; + SIGNAL ctrl_start2_oi : std_logic; + SIGNAL ctrl_start3_oi : std_logic; + SIGNAL ctrl_start4_oi : std_logic; + SIGNAL ctrl_start5_oi : std_logic; + SIGNAL ctrl_start6_oi : std_logic; + SIGNAL ctrl_thres_oi : DATA_T; + SIGNAL ctrl_wchgd_oi : std_logic; + SIGNAL ctrl_wr_vec_oi : MEM_WR_LINES_T; + SIGNAL ctrl_wrlat_oi : MEM_LAT_CNT_WIDTH_T; + SIGNAL rst_n_oi : std_logic; + SIGNAL set_initi_oi : std_logic; + SIGNAL set_initj_oi : std_logic; + SIGNAL starti_val_oi : ADDRESS_S_T; + SIGNAL startj_val_oi : ADDRESS_T_T; + SIGNAL stopi_val_oi : ADDRESS_S_T; + SIGNAL stopj_val_oi : ADDRESS_T_T; + + + -- Component Declarations + COMPONENT p0300_m00021_s_v03_wishbone_fsm + PORT ( + clk_i : IN std_logic ; + ctrl_alllat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_complete_i : IN std_logic ; + ctrl_dout_i : IN DATA_T ; + ctrl_dout_valid_i : IN std_logic ; + ctrl_epoch_i : IN WB_DATA_WIDTH_T ; + ctrl_int_test_i : IN std_logic ; + ctrl_int_train_i : IN std_logic ; + ctrl_memerr_i : IN std_logic ; + ctrl_not_rdy6_i : IN std_logic ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy1_i : IN std_logic ; + ctrl_rdy2_i : IN std_logic ; + ctrl_rdy3_i : IN std_logic ; + ctrl_rdy4_i : IN std_logic ; + ctrl_rdy5_i : IN std_logic ; + ctrl_rdy6_i : IN std_logic ; + ctrl_run7_i : IN std_logic ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + rst_n_i : IN std_logic ; + wb_adr_i : IN WB_ADDR_WIDTH_T ; + wb_cyc_i : IN std_logic ; + wb_dat_i : IN WB_DATA_WIDTH_T ; + wb_stb_i : IN std_logic ; + wb_we_i : IN std_logic ; + ctrl_bias_o : OUT DATA_T ; + ctrl_clear_epoch_o : OUT std_logic ; + ctrl_din_o : OUT DATA_T ; + ctrl_int_o : OUT std_logic ; + ctrl_maxepoch_o : OUT WB_DATA_WIDTH_T ; + ctrl_offset_o : OUT DATA_T ; + ctrl_rd_vec_o : OUT MEM_WR_LINES_T ; + ctrl_set_starti_o : OUT std_logic ; + ctrl_set_startj_o : OUT std_logic ; + ctrl_start3_o : OUT std_logic ; + ctrl_start4_o : OUT std_logic ; + ctrl_start5_o : OUT std_logic ; + ctrl_start6_o : OUT std_logic ; + ctrl_starti_val_o : OUT ADDRESS_S_T ; + ctrl_startj_val_o : OUT ADDRESS_T_T ; + ctrl_stopi_val_o : OUT ADDRESS_S_T ; + ctrl_stopj_val_o : OUT ADDRESS_T_T ; + ctrl_thres_o : OUT DATA_T ; + ctrl_wr_vec_o : OUT MEM_WR_LINES_T ; + wb_ack_o : OUT std_logic ; + wb_dat_o : OUT WB_DATA_WIDTH_T + ); + END COMPONENT; + COMPONENT p0300_m00022_s_v02_cal_y_fsm + PORT ( + clk_i : IN std_logic ; + cnti_end_i : IN std_logic ; + cntj_end_i : IN std_logic ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_thres_i : IN DATA_T ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + dbias_i : IN DATA_T ; + ds_i : IN DATA_T ; + dw_i : IN DATA_T ; + rst_n_i : IN std_logic ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + dout_o : OUT DATA_T ; + we_y_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00023_s_v02_cal_w_fsm + PORT ( + clk_i : IN std_logic ; + cnti_end_i : IN std_logic ; + cntj_end_i : IN std_logic ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + dbias_i : IN DATA_T ; + ds_i : IN DATA_T ; + dt_i : IN DATA_T ; + dw_i : IN DATA_T ; + dy_i : IN DATA_T ; + rst_n_i : IN std_logic ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + ctrl_wchgd_o : OUT std_logic ; + dout_o : OUT DATA_T ; + we_bias_o : OUT std_logic ; + we_w_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00024_s_v02_test_fsm + PORT ( + clk_i : IN std_logic ; + cnti_end_i : IN std_logic ; + cntj_end_i : IN std_logic ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ds_i : IN DATA_T ; + dt_i : IN DATA_T ; + dw_i : IN DATA_T ; + offset_i : IN DATA_T ; + rst_n_i : IN std_logic ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_int_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + dout_o : OUT DATA_T ; + we_s_o : OUT std_logic ; + we_t_o : OUT std_logic ; + we_w_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00025_s_v02_init_fsm + PORT ( + clk_i : IN std_logic ; + cnti_end_i : IN std_logic ; + cntj_end_i : IN std_logic ; + ctrl_bias_i : IN DATA_T ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + rst_n_i : IN std_logic ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + dout_o : OUT DATA_T ; + we_bias_o : OUT std_logic ; + we_s_o : OUT std_logic ; + we_t_o : OUT std_logic ; + we_w_o : OUT std_logic ; + we_y_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00026_s_v02_rd_wr_fsm + PORT ( + clk_i : IN std_logic ; + cnti_end_i : IN std_logic ; + cntj_end_i : IN std_logic ; + ctrl_din_i : IN DATA_T ; + ctrl_rd_vec_i : IN MEM_WR_LINES_T ; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_wr_vec_i : IN MEM_WR_LINES_T ; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T ; + dbias_i : IN DATA_T ; + ds_i : IN DATA_T ; + dt_i : IN DATA_T ; + dw_i : IN DATA_T ; + dy_i : IN DATA_T ; + rst_n_i : IN std_logic ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_complete_o : OUT std_logic ; + ctrl_dout_o : OUT DATA_T ; + ctrl_dout_valid_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + dout_o : OUT DATA_T ; + we_bias_o : OUT std_logic ; + we_s_o : OUT std_logic ; + we_t_o : OUT std_logic ; + we_w_o : OUT std_logic ; + we_y_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00027_s_v01_train_fsm + PORT ( + clk_i : IN std_logic ; + cnti_rdy_i : IN std_logic ; + cntj_rdy_i : IN std_logic ; + ctrl_clear_epoch_i : IN std_logic ; + ctrl_maxepoch_i : IN WB_DATA_WIDTH_T ; + ctrl_rdy1_i : IN std_logic ; + ctrl_rdy2_i : IN std_logic ; + ctrl_rdy7_i : IN std_logic ; + ctrl_start_i : IN std_logic ; + ctrl_wchgd_i : IN std_logic ; + rst_n_i : IN std_logic ; + ctrl_epoch_o : OUT WB_DATA_WIDTH_T ; + ctrl_int_o : OUT std_logic ; + ctrl_not_rdy_o : OUT std_logic ; + ctrl_rdy_o : OUT std_logic ; + ctrl_start1_o : OUT std_logic ; + ctrl_start2_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00028_s_v02_latency_fsm + PORT ( + clk_i : IN std_logic ; + dw_i : IN DATA_T ; + rst_n_i : IN std_logic ; + cnt_alllat_o : OUT MEM_LAT_CNT_WIDTH_T ; + cnteni_o : OUT std_logic ; + cntenj_o : OUT std_logic ; + ctrl_memerr_o : OUT std_logic ; + ctrl_rdlat_o : OUT MEM_LAT_CNT_WIDTH_T ; + ctrl_rdy_o : OUT std_logic ; + ctrl_run_o : OUT std_logic ; + ctrl_wrlat_o : OUT MEM_LAT_CNT_WIDTH_T ; + dout_o : OUT DATA_T ; + we_w_o : OUT std_logic + ); + END COMPONENT; + COMPONENT p0300_m00033_s_v01_for_loop_memwi_fsm + PORT ( + clk_i : IN std_logic ; + cnten1_i : IN std_logic ; + cnten2_i : IN std_logic ; + cnten3_i : IN std_logic ; + cnten4_i : IN std_logic ; + cnten5_i : IN std_logic ; + cnten7_i : IN std_logic ; + rst_n_i : IN std_logic ; + set_init_i : IN std_logic ; + start_vali_i : IN ADDRESS_S_T ; + stop_vali_i : IN ADDRESS_S_T ; + cnt_end_o : OUT std_logic ; + cnt_rdy_o : OUT std_logic ; + cnt_val_o : OUT ADDRESS_S_T + ); + END COMPONENT; + COMPONENT p0300_m00034_s_v01_for_loop_memwj_fsm + PORT ( + clk_i : IN std_logic ; + cnten1_i : IN std_logic ; + cnten2_i : IN std_logic ; + cnten3_i : IN std_logic ; + cnten4_i : IN std_logic ; + cnten5_i : IN std_logic ; + cnten7_i : IN std_logic ; + rst_n_i : IN std_logic ; + set_init_i : IN std_logic ; + start_valj_i : IN ADDRESS_T_T ; + stop_valj_i : IN ADDRESS_T_T ; + cnt_end_o : OUT std_logic ; + cnt_rdy_o : OUT std_logic ; + cnt_val_o : OUT ADDRESS_T_T + ); + END COMPONENT; + + -- Optional embedded configurations + -- pragma synthesis_off + FOR ALL : p0300_m00021_s_v03_wishbone_fsm USE ENTITY work.p0300_m00021_s_v03_wishbone_fsm; + FOR ALL : p0300_m00022_s_v02_cal_y_fsm USE ENTITY work.p0300_m00022_s_v02_cal_y_fsm; + FOR ALL : p0300_m00023_s_v02_cal_w_fsm USE ENTITY work.p0300_m00023_s_v02_cal_w_fsm; + FOR ALL : p0300_m00024_s_v02_test_fsm USE ENTITY work.p0300_m00024_s_v02_test_fsm; + FOR ALL : p0300_m00025_s_v02_init_fsm USE ENTITY work.p0300_m00025_s_v02_init_fsm; + FOR ALL : p0300_m00026_s_v02_rd_wr_fsm USE ENTITY work.p0300_m00026_s_v02_rd_wr_fsm; + FOR ALL : p0300_m00027_s_v01_train_fsm USE ENTITY work.p0300_m00027_s_v01_train_fsm; + FOR ALL : p0300_m00028_s_v02_latency_fsm USE ENTITY work.p0300_m00028_s_v02_latency_fsm; + FOR ALL : p0300_m00033_s_v01_for_loop_memwi_fsm USE ENTITY work.p0300_m00033_s_v01_for_loop_memwi_fsm; + FOR ALL : p0300_m00034_s_v01_for_loop_memwj_fsm USE ENTITY work.p0300_m00034_s_v01_for_loop_memwj_fsm; + -- pragma synthesis_on + + +BEGIN + -- Architecture concurrent statements + -- HDL Embedded Text Block 1 eb1 + -- eb1 1 + rst_n_oi <= NOT ( rst_i ); + + + -- Instance port mappings. + U_14 : p0300_m00021_s_v03_wishbone_fsm + PORT MAP ( + clk_i => clk_i, + ctrl_alllat_i => cnt_alllat_oi, + ctrl_complete_i => ctrl_complete_oi, + ctrl_dout_i => ctrl_dout_oi, + ctrl_dout_valid_i => ctrl_dout_valid_oi, + ctrl_epoch_i => ctrl_epoch_oi, + ctrl_int_test_i => ctrl_int4_o, + ctrl_int_train_i => ctrl_int6_o, + ctrl_memerr_i => ctrl_memerr_oi, + ctrl_not_rdy6_i => ctrl_not_rdy6_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy1_i => ctrl_rdy1_oi, + ctrl_rdy2_i => ctrl_rdy2_oi, + ctrl_rdy3_i => ctrl_rdy3_oi, + ctrl_rdy4_i => ctrl_rdy4_oi, + ctrl_rdy5_i => ctrl_rdy5_oi, + ctrl_rdy6_i => ctrl_rdy6_oi, + ctrl_run7_i => ctrl_run7_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + rst_n_i => rst_n_oi, + wb_adr_i => wb_adr_i, + wb_cyc_i => wb_cyc_i, + wb_dat_i => wb_dat_i, + wb_stb_i => wb_stb_i, + wb_we_i => wb_we_i, + ctrl_bias_o => ctrl_bias_oi, + ctrl_clear_epoch_o => ctrl_clear_epoch_oi, + ctrl_din_o => ctrl_din_oi, + ctrl_int_o => ctrl_int_o, + ctrl_maxepoch_o => ctrl_maxepoch_oi, + ctrl_offset_o => ctrl_offset_oi, + ctrl_rd_vec_o => ctrl_rd_vec_oi, + ctrl_set_starti_o => set_initi_oi, + ctrl_set_startj_o => set_initj_oi, + ctrl_start3_o => ctrl_start3_oi, + ctrl_start4_o => ctrl_start4_oi, + ctrl_start5_o => ctrl_start5_oi, + ctrl_start6_o => ctrl_start6_oi, + ctrl_starti_val_o => starti_val_oi, + ctrl_startj_val_o => startj_val_oi, + ctrl_stopi_val_o => stopi_val_oi, + ctrl_stopj_val_o => stopj_val_oi, + ctrl_thres_o => ctrl_thres_oi, + ctrl_wr_vec_o => ctrl_wr_vec_oi, + wb_ack_o => wb_ack_o, + wb_dat_o => wb_dat_o + ); + U_0 : p0300_m00022_s_v02_cal_y_fsm + PORT MAP ( + clk_i => clk_i, + cnti_end_i => cnti_end_oi, + cntj_end_i => cntj_end_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start1_oi, + ctrl_thres_i => ctrl_thres_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + dbias_i => dbias_i, + ds_i => ds_i, + dw_i => dw_i, + rst_n_i => rst_n_oi, + cnteni_o => cnteni1_oi, + cntenj_o => cntenj1_oi, + ctrl_rdy_o => ctrl_rdy1_oi, + dout_o => dout1_o, + we_y_o => we_y1_o + ); + U_8 : p0300_m00023_s_v02_cal_w_fsm + PORT MAP ( + clk_i => clk_i, + cnti_end_i => cnti_end_oi, + cntj_end_i => cntj_end_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start2_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + dbias_i => dbias_i, + ds_i => ds_i, + dt_i => dt_i, + dw_i => dw_i, + dy_i => dy_i, + rst_n_i => rst_n_oi, + cnteni_o => cnteni2_oi, + cntenj_o => cntenj2_oi, + ctrl_rdy_o => ctrl_rdy2_oi, + ctrl_wchgd_o => ctrl_wchgd_oi, + dout_o => dout2_o, + we_bias_o => we_bias2_o, + we_w_o => we_w2_o + ); + U_10 : p0300_m00024_s_v02_test_fsm + PORT MAP ( + clk_i => clk_i, + cnti_end_i => cnti_end_oi, + cntj_end_i => cntj_end_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start4_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + ds_i => ds_i, + dt_i => dt_i, + dw_i => dw_i, + offset_i => ctrl_offset_oi, + rst_n_i => rst_n_oi, + cnteni_o => cnteni4_oi, + cntenj_o => cntenj4_oi, + ctrl_int_o => ctrl_int4_o, + ctrl_rdy_o => ctrl_rdy4_oi, + dout_o => dout4_o, + we_s_o => we_s4_o, + we_t_o => we_t4_o, + we_w_o => we_w4_o + ); + U_9 : p0300_m00025_s_v02_init_fsm + PORT MAP ( + clk_i => clk_i, + cnti_end_i => cnti_end_oi, + cntj_end_i => cntj_end_oi, + ctrl_bias_i => ctrl_bias_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start3_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + rst_n_i => rst_n_oi, + cnteni_o => cnteni3_oi, + cntenj_o => cntenj3_oi, + ctrl_rdy_o => ctrl_rdy3_oi, + dout_o => dout3_o, + we_bias_o => we_bias3_o, + we_s_o => we_s3_o, + we_t_o => we_t3_o, + we_w_o => we_w3_o, + we_y_o => we_y3_o + ); + U_11 : p0300_m00026_s_v02_rd_wr_fsm + PORT MAP ( + clk_i => clk_i, + cnti_end_i => cnti_end_oi, + cntj_end_i => cntj_end_oi, + ctrl_din_i => ctrl_din_oi, + ctrl_rd_vec_i => ctrl_rd_vec_oi, + ctrl_rdlat_i => ctrl_rdlat_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start5_oi, + ctrl_wr_vec_i => ctrl_wr_vec_oi, + ctrl_wrlat_i => ctrl_wrlat_oi, + dbias_i => dbias_i, + ds_i => ds_i, + dt_i => dt_i, + dw_i => dw_i, + dy_i => dy_i, + rst_n_i => rst_n_oi, + cnteni_o => cnteni5_oi, + cntenj_o => cntenj5_oi, + ctrl_complete_o => ctrl_complete_oi, + ctrl_dout_o => ctrl_dout_oi, + ctrl_dout_valid_o => ctrl_dout_valid_oi, + ctrl_rdy_o => ctrl_rdy5_oi, + dout_o => dout5_o, + we_bias_o => we_bias5_o, + we_s_o => we_s5_o, + we_t_o => we_t5_o, + we_w_o => we_w5_o, + we_y_o => we_y5_o + ); + U_12 : p0300_m00027_s_v01_train_fsm + PORT MAP ( + clk_i => clk_i, + cnti_rdy_i => cnti_rdy_oi, + cntj_rdy_i => cntj_rdy_oi, + ctrl_clear_epoch_i => ctrl_clear_epoch_oi, + ctrl_maxepoch_i => ctrl_maxepoch_oi, + ctrl_rdy1_i => ctrl_rdy1_oi, + ctrl_rdy2_i => ctrl_rdy2_oi, + ctrl_rdy7_i => ctrl_rdy7_oi, + ctrl_start_i => ctrl_start6_oi, + ctrl_wchgd_i => ctrl_wchgd_oi, + rst_n_i => rst_n_oi, + ctrl_epoch_o => ctrl_epoch_oi, + ctrl_int_o => ctrl_int6_o, + ctrl_not_rdy_o => ctrl_not_rdy6_oi, + ctrl_rdy_o => ctrl_rdy6_oi, + ctrl_start1_o => ctrl_start1_oi, + ctrl_start2_o => ctrl_start2_oi + ); + U_13 : p0300_m00028_s_v02_latency_fsm + PORT MAP ( + clk_i => clk_i, + dw_i => dw_i, + rst_n_i => rst_n_oi, + cnt_alllat_o => cnt_alllat_oi, + cnteni_o => cnteni7_oi, + cntenj_o => cntenj7_oi, + ctrl_memerr_o => ctrl_memerr_oi, + ctrl_rdlat_o => ctrl_rdlat_oi, + ctrl_rdy_o => ctrl_rdy7_oi, + ctrl_run_o => ctrl_run7_oi, + ctrl_wrlat_o => ctrl_wrlat_oi, + dout_o => dout7_o, + we_w_o => we_w7_o + ); + U_2 : p0300_m00033_s_v01_for_loop_memwi_fsm + PORT MAP ( + clk_i => clk_i, + cnten1_i => cnteni1_oi, + cnten2_i => cnteni2_oi, + cnten3_i => cnteni3_oi, + cnten4_i => cnteni4_oi, + cnten5_i => cnteni5_oi, + cnten7_i => cnteni7_oi, + rst_n_i => rst_n_oi, + set_init_i => set_initi_oi, + start_vali_i => starti_val_oi, + stop_vali_i => stopi_val_oi, + cnt_end_o => cnti_end_oi, + cnt_rdy_o => cnti_rdy_oi, + cnt_val_o => addr_i_o + ); + U_1 : p0300_m00034_s_v01_for_loop_memwj_fsm + PORT MAP ( + clk_i => clk_i, + cnten1_i => cntenj1_oi, + cnten2_i => cntenj2_oi, + cnten3_i => cntenj3_oi, + cnten4_i => cntenj4_oi, + cnten5_i => cntenj5_oi, + cnten7_i => cntenj7_oi, + rst_n_i => rst_n_oi, + set_init_i => set_initj_oi, + start_valj_i => startj_val_oi, + stop_valj_i => stopj_val_oi, + cnt_end_o => cntj_end_oi, + cnt_rdy_o => cntj_rdy_oi, + cnt_val_o => addr_j_o + ); + +END struct; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00021_s_v03_wishbone_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00021_s_v03_wishbone_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00021_s_v03_wishbone_fsm.vhd (revision 8) @@ -0,0 +1,867 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00021_s_v03_wishbone_fsm IS + PORT( + clk_i : IN std_logic; + ctrl_alllat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_complete_i : IN std_logic; + ctrl_dout_i : IN DATA_T; + ctrl_dout_valid_i : IN std_logic; + ctrl_epoch_i : IN WB_DATA_WIDTH_T; + ctrl_int_test_i : IN std_logic; + ctrl_int_train_i : IN std_logic; + ctrl_memerr_i : IN std_logic; + ctrl_not_rdy6_i : IN std_logic; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy1_i : IN std_logic; + ctrl_rdy2_i : IN std_logic; + ctrl_rdy3_i : IN std_logic; + ctrl_rdy4_i : IN std_logic; + ctrl_rdy5_i : IN std_logic; + ctrl_rdy6_i : IN std_logic; + ctrl_run7_i : IN std_logic; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + rst_n_i : IN std_logic; + wb_adr_i : IN WB_ADDR_WIDTH_T; + wb_cyc_i : IN std_logic; + wb_dat_i : IN WB_DATA_WIDTH_T; + wb_stb_i : IN std_logic; + wb_we_i : IN std_logic; + ctrl_bias_o : OUT DATA_T; + ctrl_clear_epoch_o : OUT std_logic; + ctrl_din_o : OUT DATA_T; + ctrl_int_o : OUT std_logic; + ctrl_maxepoch_o : OUT WB_DATA_WIDTH_T; + ctrl_offset_o : OUT DATA_T; + ctrl_rd_vec_o : OUT MEM_WR_LINES_T; + ctrl_set_starti_o : OUT std_logic; + ctrl_set_startj_o : OUT std_logic; + ctrl_start3_o : OUT std_logic; + ctrl_start4_o : OUT std_logic; + ctrl_start5_o : OUT std_logic; + ctrl_start6_o : OUT std_logic; + ctrl_starti_val_o : OUT ADDRESS_S_T; + ctrl_startj_val_o : OUT ADDRESS_T_T; + ctrl_stopi_val_o : OUT ADDRESS_S_T; + ctrl_stopj_val_o : OUT ADDRESS_T_T; + ctrl_thres_o : OUT DATA_T; + ctrl_wr_vec_o : OUT MEM_WR_LINES_T; + wb_ack_o : OUT std_logic; + wb_dat_o : OUT WB_DATA_WIDTH_T + ); + +-- Declarations + +END p0300_m00021_s_v03_wishbone_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 3.0 2022/07/21 +-- - Delete alpha register and output +-- - Consolidate # cycles +-- Revision 2.0 2022/06/18 +-- - Introduce self-resets for status signals +-- - Remove states introduced for debugging +-- Revision 1.0 2022/06/11 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00021_s_v03_wishbone_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_bias_reg : DATA_T; + SIGNAL ctrl_complete_reg : std_logic; + SIGNAL ctrl_din_reg : DATA_T; + SIGNAL ctrl_int_en_reg : std_logic; + SIGNAL ctrl_int_test_reg : std_logic; + SIGNAL ctrl_int_train_reg : std_logic; + SIGNAL ctrl_maxepoch_reg : WB_DATA_WIDTH_T; + SIGNAL ctrl_offset_reg : DATA_T; + SIGNAL ctrl_rd_vec_reg : MEM_WR_LINES_T; + SIGNAL ctrl_rdy_reg : std_logic; + SIGNAL ctrl_starti_val_reg : ADDRESS_S_T; + SIGNAL ctrl_startj_val_reg : ADDRESS_T_T; + SIGNAL ctrl_stat_a_reg : DATA_T; + SIGNAL ctrl_stopi_val_reg : ADDRESS_S_T; + SIGNAL ctrl_stopj_val_reg : ADDRESS_T_T; + SIGNAL ctrl_thres_reg : DATA_T; + SIGNAL ctrl_wr_vec_reg : MEM_WR_LINES_T; + SIGNAL wb_adr_reg : WB_ADDR_WIDTH_T; + SIGNAL wb_cyc_reg : std_logic; + SIGNAL wb_dat_reg : WB_DATA_WIDTH_T; + SIGNAL wb_stb_reg : std_logic; + SIGNAL wb_we_reg : std_logic; + SIGNAL zero_net_addrs : ADDRESS_S_ZERO_T; + SIGNAL zero_net_addrt : ADDRESS_T_ZERO_T; + + TYPE STATE_TYPE IS ( + S03, + S01, + S04, + S06, + S07, + S08, + S09, + S10, + S11, + S12, + S13, + S17, + S18, + S19, + S20, + S21, + S22, + S23, + S24, + S25, + S26, + S27, + S28, + S29, + S30, + S31, + S32, + S33, + S34, + S35, + S36, + S37, + S38, + S39, + S40, + S41, + S00, + S46, + S47, + S02, + S48, + S14, + S15, + S01a + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_bias_reg <= (others => '0'); + ctrl_complete_reg <= '0'; + ctrl_din_reg <= (others => '0'); + ctrl_int_en_reg <= '0'; + ctrl_int_test_reg <= '0'; + ctrl_int_train_reg <= '0'; + ctrl_maxepoch_reg <= (others => '0'); + ctrl_offset_reg <= (others => '0'); + ctrl_rd_vec_reg <= (others => '0'); + ctrl_rdy_reg <= '0'; + ctrl_starti_val_reg <= (others => '0'); + ctrl_startj_val_reg <= (others => '0'); + ctrl_stat_a_reg <= (others => '0'); + ctrl_stopi_val_reg <= zero_net_addrs & '1'; + ctrl_stopj_val_reg <= zero_net_addrt & '1'; + ctrl_thres_reg <= (others => '0'); + ctrl_wr_vec_reg <= (others => '0'); + wb_adr_reg <= (others => '0'); + wb_cyc_reg <= '0'; + wb_dat_reg <= (others => '0'); + wb_stb_reg <= '0'; + wb_we_reg <= '0'; + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_bias_reg <= ctrl_bias_reg; + ctrl_complete_reg <= ctrl_complete_reg OR ctrl_complete_i; + ctrl_din_reg <= ctrl_din_reg; + ctrl_int_en_reg <= ctrl_int_en_reg; + ctrl_int_test_reg <= ctrl_int_test_reg OR ctrl_int_test_i; + ctrl_int_train_reg <= ctrl_int_train_reg OR ctrl_int_train_i; + ctrl_maxepoch_reg <= ctrl_maxepoch_reg; + ctrl_offset_reg <= ctrl_offset_reg; + ctrl_rd_vec_reg <= ctrl_rd_vec_reg; + ctrl_rdy_reg <= ctrl_rdy1_i AND ctrl_rdy2_i AND ctrl_rdy3_i AND ctrl_rdy4_i AND ctrl_rdy5_i AND ctrl_rdy6_i; + ctrl_starti_val_reg <= ctrl_starti_val_reg; + ctrl_startj_val_reg <= ctrl_startj_val_reg; + ctrl_stat_a_reg <= ctrl_stat_a_reg; + ctrl_stopi_val_reg <= ctrl_stopi_val_reg; + ctrl_stopj_val_reg <= ctrl_stopj_val_reg; + ctrl_thres_reg <= ctrl_thres_reg; + ctrl_wr_vec_reg <= ctrl_wr_vec_reg; + wb_adr_reg <= wb_adr_i; + wb_cyc_reg <= wb_cyc_i; + wb_dat_reg <= wb_dat_i; + wb_stb_reg <= wb_stb_i; + wb_we_reg <= wb_we_i; + + -- Combined Actions + CASE current_state IS + -- READ Status A + WHEN S03 => + ctrl_complete_reg <= ctrl_complete_i OR ( ctrl_complete_reg AND ( NOT ( ctrl_stat_a_reg (STAT_RD_WR_COMPLETE) ) ) ); + ctrl_int_test_reg <= ctrl_int_test_i OR ( ctrl_int_test_reg AND ( NOT ( ctrl_stat_a_reg (STAT_INT_TEST) ) ) ); + ctrl_int_train_reg <= ctrl_int_train_i OR ( ctrl_int_train_reg AND ( NOT ( ctrl_stat_a_reg (STAT_INT_TRAIN) ) ) ); + -- Wait for + -- transfer/phase + WHEN S01 => + ctrl_stat_a_reg (STAT_RDY) <= ctrl_rdy_reg; + ctrl_stat_a_reg (STAT_LAT_RUN) <= ctrl_run7_i; + ctrl_stat_a_reg (STAT_NOT_RDY) <= ctrl_not_rdy6_i; + ctrl_stat_a_reg (STAT_INT_EN) <= ctrl_int_en_reg; + ctrl_stat_a_reg (STAT_MEMERR) <= ctrl_memerr_i; + ctrl_stat_a_reg (STAT_RD_WR_COMPLETE) <= ctrl_complete_reg AND ctrl_rdy_reg; + ctrl_stat_a_reg (STAT_INT_TEST) <= ctrl_int_test_reg AND ctrl_rdy_reg; + ctrl_stat_a_reg (STAT_INT_TRAIN) <= ctrl_int_train_reg AND ctrl_rdy_reg; + -- WRITE Threshold + -- register + WHEN S04 => + ctrl_thres_reg <= wb_dat_reg (DATA_N); + -- WRITE Bias + -- register + WHEN S08 => + ctrl_bias_reg <= wb_dat_reg (DATA_N); + -- WRITE Offset + -- register + WHEN S10 => + ctrl_offset_reg <= wb_dat_reg (DATA_N); + -- WRITE Maxepochs + -- register + WHEN S12 => + ctrl_maxepoch_reg <= wb_dat_reg; + -- WRITE Start i + -- register + WHEN S18 => + ctrl_starti_val_reg <= wb_dat_reg (ADDRESS_S_N); + -- WRITE Start j + -- register + WHEN S20 => + ctrl_startj_val_reg <= wb_dat_reg (ADDRESS_T_N); + -- WRITE Stop i + -- register + WHEN S22 => + ctrl_stopi_val_reg <= wb_dat_reg (ADDRESS_S_N); + -- WRITE Stop j + -- register + WHEN S24 => + ctrl_stopj_val_reg <= wb_dat_reg (ADDRESS_T_N); + -- WRITE SMEM + WHEN S32 => + ctrl_rd_vec_reg <= "00001"; + ctrl_wr_vec_reg <= "00001"; + ctrl_din_reg <= wb_dat_reg (DATA_N); + -- WRITE TMEM + WHEN S33 => + ctrl_rd_vec_reg <= "00010"; + ctrl_wr_vec_reg <= "00010"; + ctrl_din_reg <= wb_dat_reg (DATA_N); + -- WRITE WMEM + WHEN S34 => + ctrl_rd_vec_reg <= "00100"; + ctrl_wr_vec_reg <= "00100"; + ctrl_din_reg <= wb_dat_reg (DATA_N); + -- WRITE YMEM + WHEN S35 => + ctrl_rd_vec_reg <= "01000"; + ctrl_wr_vec_reg <= "01000"; + ctrl_din_reg <= wb_dat_reg (DATA_N); + -- WRITE BIASMEM + WHEN S36 => + ctrl_rd_vec_reg <= "10000"; + ctrl_wr_vec_reg <= "10000"; + ctrl_din_reg <= wb_dat_reg (DATA_N); + -- READ SMEM + WHEN S37 => + ctrl_rd_vec_reg <= "00001"; + -- READ TMEM + WHEN S38 => + ctrl_rd_vec_reg <= "00010"; + -- READ WMEM + WHEN S39 => + ctrl_rd_vec_reg <= "00100"; + -- READ YMEM + WHEN S40 => + ctrl_rd_vec_reg <= "01000"; + -- READ BIASMEM + WHEN S41 => + ctrl_rd_vec_reg <= "10000"; + -- WRITE Status A + WHEN S02 => + ctrl_int_en_reg <= wb_dat_reg (STAT_INT_EN); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + ctrl_rdy3_i, + ctrl_rdy4_i, + ctrl_rdy5_i, + current_state, + wb_adr_reg, + wb_cyc_reg, + wb_stb_reg, + wb_we_reg + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- READ Status A + WHEN S03 => + next_state <= S01a; + -- Wait for + -- transfer/phase + WHEN S01 => + IF (unsigned (wb_adr_reg) = WB_STAT_A AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S03; + ELSIF (unsigned (wb_adr_reg) = WB_THRES AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S06; + ELSIF (unsigned (wb_adr_reg) = WB_BIAS AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S07; + ELSIF (unsigned (wb_adr_reg) = WB_OFFSET AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S09; + ELSIF (unsigned (wb_adr_reg) = WB_MAXEPOCH AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S11; + ELSIF (unsigned (wb_adr_reg) = WB_IMAX AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S13; + ELSIF (unsigned (wb_adr_reg) = WB_STARTI AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S17; + ELSIF (unsigned (wb_adr_reg) = WB_STOPI AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S21; + ELSIF (unsigned (wb_adr_reg) = WB_STARTJ AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S19; + ELSIF (unsigned (wb_adr_reg) = WB_STOPJ AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S23; + ELSIF (unsigned (wb_adr_reg) = WB_EPOCH AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S25; + ELSIF (unsigned (wb_adr_reg) = WB_WRLAT AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S26; + ELSIF (unsigned (wb_adr_reg) = WB_RDLAT AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S27; + ELSIF (unsigned (wb_adr_reg) = WB_ALLLAT AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S28; + ELSIF (unsigned (wb_adr_reg) = WB_START5_S AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S37; + ELSIF (unsigned (wb_adr_reg) = WB_START5_T AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S38; + ELSIF (unsigned (wb_adr_reg) = WB_START5_W AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S39; + ELSIF (unsigned (wb_adr_reg) = WB_START5_Y AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S40; + ELSIF (unsigned (wb_adr_reg) = WB_START5_BIAS AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S41; + ELSIF (unsigned (wb_adr_reg) = WB_THRES AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S04; + ELSIF (unsigned (wb_adr_reg) = WB_BIAS AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S08; + ELSIF (unsigned (wb_adr_reg) = WB_OFFSET AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S10; + ELSIF (unsigned (wb_adr_reg) = WB_MAXEPOCH AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S12; + ELSIF (unsigned (wb_adr_reg) = WB_STARTI AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S18; + ELSIF (unsigned (wb_adr_reg) = WB_STOPI AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S22; + ELSIF (unsigned (wb_adr_reg) = WB_STARTJ AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S20; + ELSIF (unsigned (wb_adr_reg) = WB_STOPJ AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S24; + ELSIF (unsigned (wb_adr_reg) = WB_START3 AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S29; + ELSIF (unsigned (wb_adr_reg) = WB_START4 AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S30; + ELSIF (unsigned (wb_adr_reg) = WB_START5_S AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S32; + ELSIF (unsigned (wb_adr_reg) = WB_START5_T AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S33; + ELSIF (unsigned (wb_adr_reg) = WB_START5_W AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S34; + ELSIF (unsigned (wb_adr_reg) = WB_START5_Y AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S35; + ELSIF (unsigned (wb_adr_reg) = WB_START5_BIAS AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S36; + ELSIF (unsigned (wb_adr_reg) = WB_START6 AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S31; + ELSIF (unsigned (wb_adr_reg) = WB_STAT_A AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '1') THEN + next_state <= S02; + ELSIF (unsigned (wb_adr_reg) = WB_JMAX AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S14; + ELSIF (unsigned (wb_adr_reg) = WB_MEMDATA_WIDTH AND wb_stb_reg = '1' AND wb_cyc_reg = '1' AND wb_we_reg = '0') THEN + next_state <= S15; + ELSIF (wb_stb_reg = '1' AND wb_cyc_reg = '1') THEN + next_state <= S48; + ELSE + next_state <= S01; + END IF; + -- WRITE Threshold + -- register + WHEN S04 => + next_state <= S01a; + -- READ Threshold + -- register + WHEN S06 => + next_state <= S01a; + -- READ Bias + -- register + WHEN S07 => + next_state <= S01a; + -- WRITE Bias + -- register + WHEN S08 => + next_state <= S01a; + -- READ Offset + -- register + WHEN S09 => + next_state <= S01a; + -- WRITE Offset + -- register + WHEN S10 => + next_state <= S01a; + -- READ Maxepochs + -- register + WHEN S11 => + next_state <= S01a; + -- WRITE Maxepochs + -- register + WHEN S12 => + next_state <= S01a; + -- READ maximum + -- rows i + WHEN S13 => + next_state <= S01a; + -- READ Start i + -- register + WHEN S17 => + next_state <= S01a; + -- WRITE Start i + -- register + WHEN S18 => + next_state <= S01a; + -- READ Start j + -- register + WHEN S19 => + next_state <= S01a; + -- WRITE Start j + -- register + WHEN S20 => + next_state <= S01a; + -- READ Stop i + -- register + WHEN S21 => + next_state <= S01a; + -- WRITE Stop i + -- register + WHEN S22 => + next_state <= S01a; + -- READ Stop j + -- register + WHEN S23 => + next_state <= S01a; + -- WRITE Stop j + -- register + WHEN S24 => + next_state <= S01a; + -- READ Epochs + -- register + WHEN S25 => + next_state <= S01a; + -- READ coded + -- WR Lat + -- register + WHEN S26 => + next_state <= S01a; + -- READ coded + -- RD Lat + -- register + WHEN S27 => + next_state <= S01a; + -- READ decimal + -- Latency register + WHEN S28 => + next_state <= S01a; + -- Start INIT + WHEN S29 => + IF (ctrl_rdy3_i = '0') THEN + next_state <= S01a; + ELSE + next_state <= S29; + END IF; + -- Start TEST + WHEN S30 => + IF (ctrl_rdy4_i = '0') THEN + next_state <= S01a; + ELSE + next_state <= S30; + END IF; + -- Start TRAIN + WHEN S31 => + next_state <= S01a; + -- WRITE SMEM + WHEN S32 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S47; + END IF; + -- WRITE TMEM + WHEN S33 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S47; + END IF; + -- WRITE WMEM + WHEN S34 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S47; + END IF; + -- WRITE YMEM + WHEN S35 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S47; + END IF; + -- WRITE BIASMEM + WHEN S36 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S47; + END IF; + -- READ SMEM + WHEN S37 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S46; + END IF; + -- READ TMEM + WHEN S38 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S46; + END IF; + -- READ WMEM + WHEN S39 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S46; + END IF; + -- READ YMEM + WHEN S40 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S46; + END IF; + -- READ BIASMEM + WHEN S41 => + IF (ctrl_rdy5_i = '0') THEN + next_state <= S46; + END IF; + -- Reset state + WHEN S00 => + next_state <= S01; + -- READ xMEM + WHEN S46 => + IF (ctrl_rdy5_i = '1') THEN + next_state <= S01a; + ELSE + next_state <= S46; + END IF; + -- WRITE xMEM + WHEN S47 => + IF (ctrl_rdy5_i = '1') THEN + next_state <= S01a; + ELSE + next_state <= S47; + END IF; + -- WRITE Status A + WHEN S02 => + next_state <= S01a; + -- Dummy + -- READ / WRITE + WHEN S48 => + next_state <= S01a; + -- READ maximum + -- colums j + WHEN S14 => + next_state <= S01a; + -- READ memory + -- data width + WHEN S15 => + next_state <= S01a; + -- Waite State + WHEN S01a => + next_state <= S01; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + ctrl_alllat_i, + ctrl_bias_reg, + ctrl_din_reg, + ctrl_dout_i, + ctrl_epoch_i, + ctrl_int_en_reg, + ctrl_int_test_reg, + ctrl_int_train_reg, + ctrl_maxepoch_reg, + ctrl_offset_reg, + ctrl_rd_vec_reg, + ctrl_rdlat_i, + ctrl_rdy3_i, + ctrl_rdy4_i, + ctrl_rdy5_i, + ctrl_starti_val_reg, + ctrl_startj_val_reg, + ctrl_stat_a_reg, + ctrl_stopi_val_reg, + ctrl_stopj_val_reg, + ctrl_thres_reg, + ctrl_wr_vec_reg, + ctrl_wrlat_i, + current_state, + wb_cyc_i, + wb_dat_reg, + wb_stb_i + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + ctrl_bias_o <= ctrl_bias_reg; + ctrl_clear_epoch_o <= '0'; + ctrl_din_o <= ctrl_din_reg; + ctrl_int_o <= ctrl_int_en_reg AND (ctrl_int_train_reg OR ctrl_int_test_reg); + ctrl_maxepoch_o <= ctrl_maxepoch_reg; + ctrl_offset_o <= ctrl_offset_reg; + ctrl_rd_vec_o <= ctrl_rd_vec_reg; + ctrl_set_starti_o <= '0'; + ctrl_set_startj_o <= '0'; + ctrl_start3_o <= '0'; + ctrl_start4_o <= '0'; + ctrl_start5_o <= '0'; + ctrl_start6_o <= '0'; + ctrl_starti_val_o <= ctrl_starti_val_reg; + ctrl_startj_val_o <= ctrl_startj_val_reg; + ctrl_stopi_val_o <= ctrl_stopi_val_reg; + ctrl_stopj_val_o <= ctrl_stopj_val_reg; + ctrl_thres_o <= ctrl_thres_reg; + ctrl_wr_vec_o <= ctrl_wr_vec_reg; + wb_ack_o <= '0'; + wb_dat_o <= (others => '0'); + -- Default Assignment To Internals + zero_net_addrs <= (others => '0'); + zero_net_addrt <= (others => '0'); + + -- Combined Actions + CASE current_state IS + -- READ Status A + WHEN S03 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_stat_a_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Threshold + -- register + WHEN S04 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Threshold + -- register + WHEN S06 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_thres_reg ) )), WB_DATA_WIDTH ) ); + -- READ Bias + -- register + WHEN S07 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_bias_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Bias + -- register + WHEN S08 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Offset + -- register + WHEN S09 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_offset_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Offset + -- register + WHEN S10 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Maxepochs + -- register + WHEN S11 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= ctrl_maxepoch_reg; + -- WRITE Maxepochs + -- register + WHEN S12 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ maximum + -- rows i + WHEN S13 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( ( I_MAX ) )), WB_DATA_WIDTH ) ); + -- READ Start i + -- register + WHEN S17 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_starti_val_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Start i + -- register + WHEN S18 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Start j + -- register + WHEN S19 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_startj_val_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Start j + -- register + WHEN S20 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Stop i + -- register + WHEN S21 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_stopi_val_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Stop i + -- register + WHEN S22 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Stop j + -- register + WHEN S23 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_stopj_val_reg ) )), WB_DATA_WIDTH ) ); + -- WRITE Stop j + -- register + WHEN S24 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- READ Epochs + -- register + WHEN S25 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= ctrl_epoch_i; + -- READ coded + -- WR Lat + -- register + WHEN S26 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_wrlat_i ) )), WB_DATA_WIDTH ) ); + -- READ coded + -- RD Lat + -- register + WHEN S27 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_rdlat_i ) )), WB_DATA_WIDTH ) ); + -- READ decimal + -- Latency register + WHEN S28 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( unsigned ( ctrl_alllat_i ) )), WB_DATA_WIDTH ) ); + -- Start INIT + WHEN S29 => + wb_ack_o <= NOT ctrl_rdy3_i AND wb_stb_i AND wb_cyc_i; + ctrl_start3_o <= '1'; + -- Start TEST + WHEN S30 => + wb_ack_o <= NOT ctrl_rdy4_i AND wb_stb_i AND wb_cyc_i; + ctrl_start4_o <= '1'; + -- Start TRAIN + WHEN S31 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + ctrl_start6_o <= '1'; + ctrl_clear_epoch_o <= wb_dat_reg (0); + -- WRITE SMEM + WHEN S32 => + ctrl_start5_o <= '1'; + -- WRITE TMEM + WHEN S33 => + ctrl_start5_o <= '1'; + -- WRITE WMEM + WHEN S34 => + ctrl_start5_o <= '1'; + -- WRITE YMEM + WHEN S35 => + ctrl_start5_o <= '1'; + -- WRITE BIASMEM + WHEN S36 => + ctrl_start5_o <= '1'; + -- READ SMEM + WHEN S37 => + ctrl_start5_o <= '1'; + -- READ TMEM + WHEN S38 => + ctrl_start5_o <= '1'; + -- READ WMEM + WHEN S39 => + ctrl_start5_o <= '1'; + -- READ YMEM + WHEN S40 => + ctrl_start5_o <= '1'; + -- READ BIASMEM + WHEN S41 => + ctrl_start5_o <= '1'; + -- READ xMEM + WHEN S46 => + wb_ack_o <= ctrl_rdy5_i AND wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_signed ( (conv_integer ( signed ( ctrl_dout_i ) )), WB_DATA_WIDTH ) ); + -- WRITE xMEM + WHEN S47 => + wb_ack_o <= ctrl_rdy5_i AND wb_stb_i AND wb_cyc_i; + -- WRITE Status A + WHEN S02 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + -- Dummy + -- READ / WRITE + WHEN S48 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= (others => '0'); + -- READ maximum + -- colums j + WHEN S14 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( ( J_MAX ) )), WB_DATA_WIDTH ) ); + -- READ memory + -- data width + WHEN S15 => + wb_ack_o <= wb_stb_i AND wb_cyc_i; + wb_dat_o <= std_logic_vector ( conv_unsigned ( (conv_integer ( ( DATA_WIDTH ) )), WB_DATA_WIDTH ) ); + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00022_s_v02_cal_y_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00022_s_v02_cal_y_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00022_s_v02_cal_y_fsm.vhd (revision 8) @@ -0,0 +1,375 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00022_s_v02_cal_y_fsm IS + PORT( + clk_i : IN std_logic; + cnti_end_i : IN std_logic; + cntj_end_i : IN std_logic; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_thres_i : IN DATA_T; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + dbias_i : IN DATA_T; + ds_i : IN DATA_T; + dw_i : IN DATA_T; + rst_n_i : IN std_logic; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + dout_o : OUT DATA_T; + we_y_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00022_s_v02_cal_y_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/04 +-- - Introduced latency for write +-- Revision 1.0 2022/06/25 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00022_s_v02_cal_y_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_start_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL dbias_reg : DATA_T; + SIGNAL dw_reg : DATA_T; + SIGNAL y_inj_reg : DATA_T; + + TYPE STATE_TYPE IS ( + S00, + S03, + S02, + S05, + S04, + S07, + S08, + S10, + S11, + S12, + S13, + S01, + S16, + S06, + S15, + S09, + S14 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_rdlat_reg <= (others => '0'); + ctrl_start_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + dbias_reg <= (others => '0'); + dw_reg <= (others => '0'); + y_inj_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_start_reg <= ctrl_start_i; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + dbias_reg <= dbias_i; + dw_reg <= dw_i; + y_inj_reg <= y_inj_reg; + + -- Combined Actions + CASE current_state IS + -- ADD if + -- ds GT 0 + WHEN S03 => + --y_inj_reg <= signed (y_inj_reg) + signed (dw_i); + y_inj_reg <= signed (y_inj_reg) + signed (dw_reg); + -- Replacement of multiplication. + -- y_inj calculation and increment + -- i-address. + WHEN S02 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + -- SUB if + -- ds LT 0 + WHEN S05 => + --y_inj_reg <= signed (y_inj_reg) - signed (dw_i); + y_inj_reg <= signed (y_inj_reg) - signed (dw_reg); + -- Dummy cycles. + -- Loop path for + -- next y_inj-value.. + WHEN S07 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Update y_inj-value + -- with bias + WHEN S08 => + --y_inj_reg <= (signed (y_inj_reg)) + (signed (dbias_i)); + y_inj_reg <= (signed (y_inj_reg)) + (signed (dbias_reg)); + -- Replacement of + -- multiplication. + -- y calculation. + WHEN S10 => + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- Larency counter. + -- Return path last j + WHEN S16 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + WHEN S06 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Increment + -- j-address + WHEN S15 => + y_inj_reg <= (others => '0'); + ctrl_rdlat_reg <= ctrl_rdlat_i; + -- Dummy cycles to + -- equalize latency. + WHEN S09 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + WHEN S14 => + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnti_end_i, + cntj_end_i, + ctrl_rdlat_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_thres_i, + ctrl_wrlat_reg, + current_state, + ds_i, + y_inj_reg + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + -- ADD if + -- ds GT 0 + WHEN S03 => + next_state <= S06; + -- Replacement of multiplication. + -- y_inj calculation and increment + -- i-address. + WHEN S02 => + IF (cnti_end_i = '1') THEN + next_state <= S08; + ELSIF (signed (ds_i) > 0) THEN + next_state <= S03; + ELSIF (signed (ds_i) < 0) THEN + next_state <= S05; + ELSE + next_state <= S04; + END IF; + -- SUB if + -- ds LT 0 + WHEN S05 => + next_state <= S06; + -- No function + -- if ds EQ 0 + WHEN S04 => + next_state <= S06; + -- Dummy cycles. + -- Loop path for + -- next y_inj-value.. + WHEN S07 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S02; + ELSE + next_state <= S07; + END IF; + -- Update y_inj-value + -- with bias + WHEN S08 => + next_state <= S09; + -- Replacement of + -- multiplication. + -- y calculation. + WHEN S10 => + IF (signed (y_inj_reg) < signed (ctrl_thres_i)) THEN + next_state <= S11; + ELSIF (signed (y_inj_reg) > signed (ctrl_thres_i)) THEN + next_state <= S13; + ELSE + next_state <= S12; + END IF; + -- ADD if + -- y_inj GT thres + WHEN S11 => + next_state <= S14; + -- No function if + -- y_inj EQ thres + WHEN S12 => + next_state <= S14; + -- SUB if + -- y_inj LT thres + WHEN S13 => + next_state <= S14; + -- Wait for next + -- calculation of + -- y-values + WHEN S01 => + IF (ctrl_start_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S01; + END IF; + -- Larency counter. + -- Return path last j + WHEN S16 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S01; + ELSE + next_state <= S16; + END IF; + -- Dummy cycles to + -- equalize latency. + WHEN S06 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7) THEN + next_state <= S02; + ELSE + next_state <= S06; + END IF; + -- Increment + -- j-address + WHEN S15 => + IF (cntj_end_i = '1') THEN + next_state <= S16; + ELSE + next_state <= S07; + END IF; + -- Dummy cycles to + -- equalize latency. + WHEN S09 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7) THEN + next_state <= S10; + ELSE + next_state <= S09; + END IF; + -- Dummy cycles to + -- equalize latency. + WHEN S14 => + IF (unsigned ( ctrl_wrlat_reg ) <= 3) THEN + next_state <= S15; + ELSE + next_state <= S14; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_rdy_o <= '0'; + dout_o <= (others => '0'); + we_y_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Replacement of multiplication. + -- y_inj calculation and increment + -- i-address. + WHEN S02 => + cnteni_o <= '1'; + -- ADD if + -- y_inj GT thres + WHEN S11 => + dout_o <= (others => '1'); + we_y_o <= '1'; + -- No function if + -- y_inj EQ thres + WHEN S12 => + dout_o <= (others => '0'); + we_y_o <= '1'; + -- SUB if + -- y_inj LT thres + WHEN S13 => + dout_o(0) <= '1'; + we_y_o <= '1'; + -- Wait for next + -- calculation of + -- y-values + WHEN S01 => + ctrl_rdy_o <= '1'; + -- Increment + -- j-address + WHEN S15 => + cntenj_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00023_s_v02_cal_w_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00023_s_v02_cal_w_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00023_s_v02_cal_w_fsm.vhd (revision 8) @@ -0,0 +1,367 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00023_s_v02_cal_w_fsm IS + PORT( + clk_i : IN std_logic; + cnti_end_i : IN std_logic; + cntj_end_i : IN std_logic; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + dbias_i : IN DATA_T; + ds_i : IN DATA_T; + dt_i : IN DATA_T; + dw_i : IN DATA_T; + dy_i : IN DATA_T; + rst_n_i : IN std_logic; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + ctrl_wchgd_o : OUT std_logic; + dout_o : OUT DATA_T; + we_bias_o : OUT std_logic; + we_w_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00023_s_v02_cal_w_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/02 +-- - Introduced latency for write +-- Revision 1.0 2022/06/29 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00023_s_v02_cal_w_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_start_reg : std_logic; + SIGNAL ctrl_wchgd_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL dbias_reg : DATA_T; + SIGNAL dt_reg : DATA_T; + SIGNAL dw_reg : DATA_T; + + TYPE STATE_TYPE IS ( + S00, + S14, + S06, + S05, + S08, + S07, + S11, + S13, + S03, + S12, + S04, + S15, + S01, + S02, + S10, + S09 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_rdlat_reg <= (others => '0'); + ctrl_start_reg <= '0'; + ctrl_wchgd_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + dbias_reg <= (others => '0'); + dt_reg <= (others => '0'); + dw_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_start_reg <= ctrl_start_i; + ctrl_wchgd_reg <= ctrl_wchgd_reg; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + dbias_reg <= dbias_i; + dt_reg <= dt_i; + dw_reg <= dw_i; + + -- Combined Actions + CASE current_state IS + -- Larency counter. + -- Loop path for + -- next w-/bias-value.. + WHEN S14 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Replacement of + -- multiplication. + -- W matrix calculation. + WHEN S05 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- Larency counter. + -- Loop path for + -- next w-value. + WHEN S11 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Increment + -- j-address + WHEN S13 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + -- w-value + -- changed. + -- Last i + WHEN S12 => + ctrl_wchgd_reg <= '1'; + -- Larency counter. + -- Return path last j + WHEN S15 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Reset "w-value + -- changed" + WHEN S02 => + ctrl_wchgd_reg <= '0'; + -- Dummy cycles to + -- equalize latency. + WHEN S09 => + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnti_end_i, + cntj_end_i, + ctrl_rdlat_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_wrlat_reg, + current_state, + ds_i, + dt_i, + dy_i + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + -- Larency counter. + -- Loop path for + -- next w-/bias-value.. + WHEN S14 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S03; + ELSE + next_state <= S14; + END IF; + -- ADD if + -- ds GT 0 + WHEN S06 => + next_state <= S09; + -- Replacement of + -- multiplication. + -- W matrix calculation. + WHEN S05 => + IF (signed (ds_i) > 0) THEN + next_state <= S06; + ELSIF (signed (ds_i) < 0) THEN + next_state <= S08; + ELSE + next_state <= S07; + END IF; + -- SUB if + -- ds LT 0 + WHEN S08 => + next_state <= S09; + -- No function + -- if ds EQ 0 + WHEN S07 => + next_state <= S09; + -- Larency counter. + -- Loop path for + -- next w-value. + WHEN S11 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S05; + ELSE + next_state <= S11; + END IF; + -- Increment + -- j-address + WHEN S13 => + IF (cntj_end_i = '1') THEN + next_state <= S15; + ELSE + next_state <= S14; + END IF; + -- Test for + -- dt EQ dy + WHEN S03 => + IF (dt_i = dy_i) THEN + next_state <= S13; + ELSE + next_state <= S04; + END IF; + -- w-value + -- changed. + -- Last i + WHEN S12 => + next_state <= S13; + -- Compute + -- new bias + WHEN S04 => + next_state <= S05; + -- Larency counter. + -- Return path last j + WHEN S15 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S01; + ELSE + next_state <= S15; + END IF; + -- Wait for next + -- calculation of + -- w-/bias-values + WHEN S01 => + IF (ctrl_start_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S01; + END IF; + -- Reset "w-value + -- changed" + WHEN S02 => + next_state <= S03; + -- Increment + -- i-address + WHEN S10 => + IF (cnti_end_i = '1') THEN + next_state <= S12; + ELSE + next_state <= S11; + END IF; + -- Dummy cycles to + -- equalize latency. + WHEN S09 => + IF (unsigned ( ctrl_wrlat_reg ) <= 3) THEN + next_state <= S10; + ELSE + next_state <= S09; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + ctrl_wchgd_reg, + current_state, + dbias_reg, + dt_reg, + dw_reg + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_rdy_o <= '0'; + ctrl_wchgd_o <= ctrl_wchgd_reg; + dout_o <= (others => '0'); + we_bias_o <= '0'; + we_w_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- ADD if + -- ds GT 0 + WHEN S06 => + --dout_o <= signed (dw_i) + signed (dt_i); + dout_o <= signed (dw_reg) + signed (dt_reg); + we_w_o <= '1'; + -- SUB if + -- ds LT 0 + WHEN S08 => + --dout_o <= signed (dw_i) - signed (dt_i); + dout_o <= signed (dw_reg) - signed (dt_reg); + we_w_o <= '1'; + -- Increment + -- j-address + WHEN S13 => + cntenj_o <= '1'; + -- Compute + -- new bias + WHEN S04 => + --dout_o <= signed (dbias_i) + signed (dt_i); + dout_o <= signed (dbias_reg) + signed (dt_reg); + we_bias_o <= '1'; + -- Wait for next + -- calculation of + -- w-/bias-values + WHEN S01 => + ctrl_rdy_o <= '1'; + -- Increment + -- i-address + WHEN S10 => + cnteni_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00024_s_v02_test_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00024_s_v02_test_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00024_s_v02_test_fsm.vhd (revision 8) @@ -0,0 +1,361 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00024_s_v02_test_fsm IS + PORT( + clk_i : IN std_logic; + cnti_end_i : IN std_logic; + cntj_end_i : IN std_logic; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + ds_i : IN DATA_T; + dt_i : IN DATA_T; + dw_i : IN DATA_T; + offset_i : IN DATA_T; + rst_n_i : IN std_logic; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_int_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + dout_o : OUT DATA_T; + we_s_o : OUT std_logic; + we_t_o : OUT std_logic; + we_w_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00024_s_v02_test_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/02 +-- - Introduced latency for write +-- Revision 1.0 2022/06/17 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00024_s_v02_test_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_int_reg : std_logic; + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_start_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL dt_reg : DATA_T; + SIGNAL dw_reg : DATA_T; + + TYPE STATE_TYPE IS ( + S02, + S05, + S04, + S07, + S06, + S11, + S12, + S13, + S14, + S15, + S01, + S00, + S09, + S08, + S10, + S03 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_int_reg <= '0'; + ctrl_rdlat_reg <= (others => '0'); + ctrl_start_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + dt_reg <= (others => '0'); + dw_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_int_reg <= '0'; + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_start_reg <= ctrl_start_i; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + dt_reg <= dt_i; + dw_reg <= dw_i; + + -- Combined Actions + CASE current_state IS + -- Clear T + WHEN S02 => + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- Replace + -- multiplication + WHEN S04 => + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- Dummy cycles to + -- equalize latency. + -- j-path + WHEN S13 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Set interrupt + -- flag + WHEN S14 => + ctrl_int_reg <= '1'; + -- Dummy cycles to + -- equalize latency. + -- End-path + WHEN S15 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Next i + WHEN S09 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + -- Dummy cycles to + -- equalize latency. + -- Write-path (i) + WHEN S08 => + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + -- i-path + WHEN S10 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + -- Write-path (i) + WHEN S03 => + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnti_end_i, + cntj_end_i, + ctrl_rdlat_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_wrlat_reg, + current_state, + ds_i + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Clear T + WHEN S02 => + next_state <= S03; + -- ADD if + -- DS > 0 + WHEN S05 => + next_state <= S08; + -- Replace + -- multiplication + WHEN S04 => + IF (signed (ds_i) > 0) THEN + next_state <= S05; + ELSIF (signed (ds_i) < 0) THEN + next_state <= S07; + ELSE + next_state <= S06; + END IF; + -- SUB if + -- DS < 0 + WHEN S07 => + next_state <= S08; + -- Do nothing if + -- DS = 0 + WHEN S06 => + next_state <= S08; + -- Add offset to T + WHEN S11 => + next_state <= S12; + -- Next j + WHEN S12 => + IF (cntj_end_i = '1') THEN + next_state <= S14; + ELSE + next_state <= S13; + END IF; + -- Dummy cycles to + -- equalize latency. + -- j-path + WHEN S13 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S02; + ELSE + next_state <= S13; + END IF; + -- Set interrupt + -- flag + WHEN S14 => + next_state <= S15; + -- Dummy cycles to + -- equalize latency. + -- End-path + WHEN S15 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7) THEN + next_state <= S01; + ELSE + next_state <= S15; + END IF; + -- Wait for next + -- TEST request + WHEN S01 => + IF (ctrl_start_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S01; + END IF; + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + -- Next i + WHEN S09 => + IF (cnti_end_i = '1') THEN + next_state <= S11; + ELSE + next_state <= S10; + END IF; + -- Dummy cycles to + -- equalize latency. + -- Write-path (i) + WHEN S08 => + IF (unsigned ( ctrl_wrlat_reg ) <= 3) THEN + next_state <= S09; + ELSE + next_state <= S08; + END IF; + -- Dummy cycles to + -- equalize latency. + -- i-path + WHEN S10 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3) THEN + next_state <= S04; + ELSE + next_state <= S10; + END IF; + -- Dummy cycles to + -- equalize latency. + -- Write-path (i) + WHEN S03 => + IF (unsigned ( ctrl_wrlat_reg ) <= 1) THEN + next_state <= S04; + ELSE + next_state <= S03; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + ctrl_int_reg, + current_state, + dt_reg, + dw_reg, + offset_i + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_int_o <= ctrl_int_reg; + ctrl_rdy_o <= '0'; + dout_o <= (others => '0'); + we_s_o <= '0'; + we_t_o <= '0'; + we_w_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Clear T + WHEN S02 => + dout_o <= (others => '0'); + we_t_o <= '1'; + -- ADD if + -- DS > 0 + WHEN S05 => + --dout_o <= signed (dt_i) + signed (dw_i); + dout_o <= signed (dt_reg) + signed (dw_reg); + we_t_o <= '1'; + -- SUB if + -- DS < 0 + WHEN S07 => + --dout_o <= signed (dt_i) - signed (dw_i); + dout_o <= signed (dt_reg) - signed (dw_reg); + we_t_o <= '1'; + -- Add offset to T + WHEN S11 => + --dout_o <= signed (dt_i) + signed (offset_i); + dout_o <= signed (dt_reg) + signed (offset_i); + we_t_o <= '1'; + -- Next j + WHEN S12 => + cntenj_o <= '1'; + -- Wait for next + -- TEST request + WHEN S01 => + ctrl_rdy_o <= '1'; + -- Next i + WHEN S09 => + cnteni_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00025_s_v02_init_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00025_s_v02_init_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00025_s_v02_init_fsm.vhd (revision 8) @@ -0,0 +1,272 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00025_s_v02_init_fsm IS + PORT( + clk_i : IN std_logic; + cnti_end_i : IN std_logic; + cntj_end_i : IN std_logic; + ctrl_bias_i : IN DATA_T; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + rst_n_i : IN std_logic; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + dout_o : OUT DATA_T; + we_bias_o : OUT std_logic; + we_s_o : OUT std_logic; + we_t_o : OUT std_logic; + we_w_o : OUT std_logic; + we_y_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00025_s_v02_init_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/03 +-- - Introduced latency for write +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00025_s_v02_init_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_start_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + + TYPE STATE_TYPE IS ( + S00, + S06, + S02, + S03, + S04, + S01, + S08, + S07, + S05 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_rdlat_reg <= (others => '0'); + ctrl_start_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_start_reg <= ctrl_start_i; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + + -- Combined Actions + CASE current_state IS + -- Write W, S. Next i. + -- S also on j-path + WHEN S04 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- Dummy cycles to + -- equalize latency. + -- End-path + WHEN S08 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + -- j-path + WHEN S07 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + -- Dummy cycles to + -- equalize latency. + -- i-path + WHEN S05 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnti_end_i, + cntj_end_i, + ctrl_rdlat_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_wrlat_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + -- Next j + WHEN S06 => + IF (cntj_end_i = '1') THEN + next_state <= S08; + ELSE + next_state <= S07; + END IF; + -- Write BIAS + WHEN S02 => + next_state <= S03; + -- Write T and Y + WHEN S03 => + next_state <= S04; + -- Write W, S. Next i. + -- S also on j-path + WHEN S04 => + IF (cnti_end_i = '1') THEN + next_state <= S06; + ELSE + next_state <= S05; + END IF; + -- Wait for next + -- INIT request + WHEN S01 => + IF (ctrl_start_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S01; + END IF; + -- Dummy cycles to + -- equalize latency. + -- End-path + WHEN S08 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7) THEN + next_state <= S01; + ELSE + next_state <= S08; + END IF; + -- Dummy cycles to + -- equalize latency. + -- j-path + WHEN S07 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7) THEN + next_state <= S02; + ELSE + next_state <= S07; + END IF; + -- Dummy cycles to + -- equalize latency. + -- i-path + WHEN S05 => + IF (unsigned ( ctrl_rdlat_reg ) <= 7 AND + unsigned ( ctrl_wrlat_reg ) <= 7) THEN + next_state <= S04; + ELSE + next_state <= S05; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + ctrl_bias_i, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_rdy_o <= '0'; + dout_o <= (others => '0'); + we_bias_o <= '0'; + we_s_o <= '0'; + we_t_o <= '0'; + we_w_o <= '0'; + we_y_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Next j + WHEN S06 => + cntenj_o <= '1'; + -- Write BIAS + WHEN S02 => + dout_o <= ctrl_bias_i; + we_bias_o <= '1'; + -- Write T and Y + WHEN S03 => + dout_o <= (others => '0'); + we_t_o <= '1'; + we_y_o <= '1'; + -- Write W, S. Next i. + -- S also on j-path + WHEN S04 => + dout_o <= (others => '0'); + we_w_o <= '1'; + we_s_o <= '1'; + cnteni_o <= '1'; + -- Wait for next + -- INIT request + WHEN S01 => + ctrl_rdy_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00026_s_v02_rd_wr_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00026_s_v02_rd_wr_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00026_s_v02_rd_wr_fsm.vhd (revision 8) @@ -0,0 +1,306 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00026_s_v02_rd_wr_fsm IS + PORT( + clk_i : IN std_logic; + cnti_end_i : IN std_logic; + cntj_end_i : IN std_logic; + ctrl_din_i : IN DATA_T; + ctrl_rd_vec_i : IN MEM_WR_LINES_T; + ctrl_rdlat_i : IN MEM_LAT_CNT_WIDTH_T; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_wr_vec_i : IN MEM_WR_LINES_T; + ctrl_wrlat_i : IN MEM_LAT_CNT_WIDTH_T; + dbias_i : IN DATA_T; + ds_i : IN DATA_T; + dt_i : IN DATA_T; + dw_i : IN DATA_T; + dy_i : IN DATA_T; + rst_n_i : IN std_logic; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_complete_o : OUT std_logic; + ctrl_dout_o : OUT DATA_T; + ctrl_dout_valid_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + dout_o : OUT DATA_T; + we_bias_o : OUT std_logic; + we_s_o : OUT std_logic; + we_t_o : OUT std_logic; + we_w_o : OUT std_logic; + we_y_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00026_s_v02_rd_wr_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/02 +-- - Introduced latency for write +-- Revision 1.0 2022/06/09 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00026_s_v02_rd_wr_fsm IS + + -- Architecture Declarations + SIGNAL ctrl_complete_reg : std_logic; + SIGNAL ctrl_dout_reg : DATA_T; + SIGNAL ctrl_dout_valid_reg : std_logic; + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_start_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + + TYPE STATE_TYPE IS ( + S01, + S02, + S12, + S22, + S32, + S42, + S03, + S00 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + ctrl_complete_reg <= '0'; + ctrl_dout_reg <= (others => '0'); + ctrl_dout_valid_reg <= '0'; + ctrl_rdlat_reg <= (others => '0'); + ctrl_start_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + ctrl_complete_reg <= '0'; + ctrl_dout_reg <= ctrl_dout_reg; + ctrl_dout_valid_reg <= '0'; + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_start_reg <= ctrl_start_i; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + + -- Combined Actions + CASE current_state IS + -- Wait for next + -- RD/WR. + WHEN S01 => + ctrl_rdlat_reg <= ctrl_rdlat_i; + ctrl_wrlat_reg <= ctrl_wrlat_i; + -- RD/WR W + WHEN S02 => + ctrl_dout_reg <= dw_i; + ctrl_dout_valid_reg <= '1'; + ctrl_complete_reg <= cnti_end_i AND cntj_end_i; + -- RD/WR S + WHEN S12 => + ctrl_dout_reg <= ds_i; + ctrl_dout_valid_reg <= '1'; + ctrl_complete_reg <= cnti_end_i; + -- RD/WR Y + WHEN S22 => + ctrl_dout_reg <= dy_i; + ctrl_dout_valid_reg <= '1'; + ctrl_complete_reg <= cntj_end_i; + -- RD/WR BIAS + WHEN S32 => + ctrl_dout_reg <= dbias_i; + ctrl_dout_valid_reg <= '1'; + ctrl_complete_reg <= cntj_end_i; + -- RD/WR T + WHEN S42 => + ctrl_dout_reg <= dt_i; + ctrl_dout_valid_reg <= '1'; + ctrl_complete_reg <= cntj_end_i; + -- Dummy cycles to + -- equalize latency. + WHEN S03 => + ctrl_rdlat_reg <= '0' & ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + ctrl_wrlat_reg <= '0' & ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH - 1 downto 1 ); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + ctrl_rd_vec_i, + ctrl_rdlat_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_wrlat_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Wait for next + -- RD/WR. + WHEN S01 => + IF (ctrl_start_reg = '1' AND + (ctrl_rd_vec_i( MEM_W_BITPOS ) = '1')) THEN + next_state <= S02; + ELSIF (ctrl_start_reg = '1' AND + (ctrl_rd_vec_i( MEM_S_BITPOS ) = '1')) THEN + next_state <= S12; + ELSIF (ctrl_start_reg = '1' AND + (ctrl_rd_vec_i( MEM_Y_BITPOS ) = '1')) THEN + next_state <= S22; + ELSIF (ctrl_start_reg = '1' AND + (ctrl_rd_vec_i( MEM_BIAS_BITPOS ) = '1')) THEN + next_state <= S32; + ELSIF (ctrl_start_reg = '1' AND + (ctrl_rd_vec_i( MEM_T_BITPOS ) = '1')) THEN + next_state <= S42; + ELSE + next_state <= S01; + END IF; + -- RD/WR W + WHEN S02 => + next_state <= S03; + -- RD/WR S + WHEN S12 => + next_state <= S03; + -- RD/WR Y + WHEN S22 => + next_state <= S03; + -- RD/WR BIAS + WHEN S32 => + next_state <= S03; + -- RD/WR T + WHEN S42 => + next_state <= S03; + -- Dummy cycles to + -- equalize latency. + WHEN S03 => + IF (unsigned ( ctrl_rdlat_reg ) <= 3 AND + unsigned ( ctrl_wrlat_reg ) <= 3) THEN + next_state <= S01; + ELSE + next_state <= S03; + END IF; + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + cnti_end_i, + ctrl_complete_reg, + ctrl_din_i, + ctrl_dout_reg, + ctrl_dout_valid_reg, + ctrl_wr_vec_i, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_complete_o <= ctrl_complete_reg; + ctrl_dout_o <= ctrl_dout_reg; + ctrl_dout_valid_o <= ctrl_dout_valid_reg; + ctrl_rdy_o <= '0'; + dout_o <= (others => '0'); + we_bias_o <= '0'; + we_s_o <= '0'; + we_t_o <= '0'; + we_w_o <= '0'; + we_y_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Wait for next + -- RD/WR. + WHEN S01 => + ctrl_rdy_o <= '1'; + -- RD/WR W + WHEN S02 => + cnteni_o <= '1'; + cntenj_o <= cnti_end_i; + dout_o <= ctrl_din_i; + we_w_o <= ctrl_wr_vec_i( MEM_W_BITPOS ); + -- RD/WR S + WHEN S12 => + cnteni_o <= '1'; + dout_o <= ctrl_din_i; + we_s_o <= ctrl_wr_vec_i( MEM_S_BITPOS ); + -- RD/WR Y + WHEN S22 => + cntenj_o <= '1'; + dout_o <= ctrl_din_i; + we_y_o <= ctrl_wr_vec_i( MEM_Y_BITPOS ); + -- RD/WR BIAS + WHEN S32 => + cntenj_o <= '1'; + dout_o <= ctrl_din_i; + we_bias_o <= ctrl_wr_vec_i( MEM_BIAS_BITPOS ); + -- RD/WR T + WHEN S42 => + cntenj_o <= '1'; + dout_o <= ctrl_din_i; + we_t_o <= ctrl_wr_vec_i( MEM_T_BITPOS ); + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00027_s_v01_train_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00027_s_v01_train_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00027_s_v01_train_fsm.vhd (revision 8) @@ -0,0 +1,308 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00027_s_v01_train_fsm IS + PORT( + clk_i : IN std_logic; + cnti_rdy_i : IN std_logic; + cntj_rdy_i : IN std_logic; + ctrl_clear_epoch_i : IN std_logic; + ctrl_maxepoch_i : IN WB_DATA_WIDTH_T; + ctrl_rdy1_i : IN std_logic; + ctrl_rdy2_i : IN std_logic; + ctrl_rdy7_i : IN std_logic; + ctrl_start_i : IN std_logic; + ctrl_wchgd_i : IN std_logic; + rst_n_i : IN std_logic; + ctrl_epoch_o : OUT WB_DATA_WIDTH_T; + ctrl_int_o : OUT std_logic; + ctrl_not_rdy_o : OUT std_logic; + ctrl_rdy_o : OUT std_logic; + ctrl_start1_o : OUT std_logic; + ctrl_start2_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00027_s_v01_train_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 1.0 2022/07/04 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00027_s_v01_train_fsm IS + + -- Architecture Declarations + SIGNAL cnti_rdy_reg : std_logic; + SIGNAL cntj_rdy_reg : std_logic; + SIGNAL ctrl_clear_epoch_reg : std_logic; + SIGNAL ctrl_epoch_reg : WB_DATA_WIDTH_T; + SIGNAL ctrl_int_reg : std_logic; + SIGNAL ctrl_not_rdy_reg : std_logic; + SIGNAL ctrl_rdy1_reg : std_logic; + SIGNAL ctrl_rdy2_reg : std_logic; + SIGNAL ctrl_start_reg : std_logic; + + TYPE STATE_TYPE IS ( + S00, + S02, + S03, + S06, + S07, + S10, + S01, + S11, + S12, + S05, + S08, + S04, + S09, + S13 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + cnti_rdy_reg <= '0'; + cntj_rdy_reg <= '0'; + ctrl_clear_epoch_reg <= '0'; + ctrl_epoch_reg <= (others => '0'); + ctrl_int_reg <= '0'; + ctrl_not_rdy_reg <= '0'; + ctrl_rdy1_reg <= '0'; + ctrl_rdy2_reg <= '0'; + ctrl_start_reg <= '0'; + ELSE + current_state <= next_state; + -- Default Assignment To Internals + cnti_rdy_reg <= cnti_rdy_i; + cntj_rdy_reg <= cntj_rdy_i; + ctrl_clear_epoch_reg <= ctrl_clear_epoch_i; + ctrl_epoch_reg <= ctrl_epoch_reg; + ctrl_int_reg <= '0'; + ctrl_not_rdy_reg <= ctrl_not_rdy_reg; + ctrl_rdy1_reg <= ctrl_rdy1_i; + ctrl_rdy2_reg <= ctrl_rdy2_i; + ctrl_start_reg <= ctrl_start_i; + + -- Combined Actions + CASE current_state IS + -- Clear NOT READY + -- register and test for + -- READY + WHEN S02 => + ctrl_not_rdy_reg <= '0'; + -- Set interrupt + -- flag + WHEN S11 => + ctrl_int_reg <= '1'; + -- Set NOT READY + -- register if modules + -- are NOT READY + WHEN S12 => + ctrl_not_rdy_reg <= '1'; + -- Dummy cycle + -- and update + -- EPOCH + WHEN S04 => + ctrl_epoch_reg <= unsigned (ctrl_epoch_reg) + ctrl_wchgd_i; + -- Clear EPOCH + -- register + WHEN S13 => + ctrl_epoch_reg <= (others => '0'); + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnti_rdy_reg, + ctrl_clear_epoch_reg, + ctrl_epoch_reg, + ctrl_maxepoch_i, + ctrl_rdy1_reg, + ctrl_rdy2_reg, + ctrl_rdy7_i, + ctrl_start_reg, + ctrl_wchgd_i, + current_state + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Reset state + WHEN S00 => + IF (ctrl_rdy7_i = '1') THEN + next_state <= S01; + ELSE + next_state <= S00; + END IF; + -- Clear NOT READY + -- register and test for + -- READY + WHEN S02 => + IF (ctrl_rdy1_reg = '0' OR + ctrl_rdy2_reg = '0' OR + cnti_rdy_reg = '0') THEN + next_state <= S12; + ELSE + next_state <= S03; + END IF; + -- Start calculation + -- of Y + WHEN S03 => + next_state <= S04; + -- Wait for CAL_Y + -- is ready + WHEN S06 => + IF (ctrl_rdy1_reg = '1') THEN + next_state <= S07; + ELSE + next_state <= S06; + END IF; + -- Start calculation + -- of BIAS and W + WHEN S07 => + next_state <= S08; + -- Loop again if + -- W was changed + WHEN S10 => + IF (ctrl_rdy2_reg = '1' AND + ctrl_wchgd_i = '1' AND + ( unsigned (ctrl_maxepoch_i) = 0 OR + unsigned (ctrl_maxepoch_i) >= unsigned (ctrl_epoch_reg) )) THEN + next_state <= S03; + ELSIF (ctrl_rdy2_reg = '1') THEN + next_state <= S11; + ELSE + next_state <= S10; + END IF; + -- Wait for next + -- training or clear + -- EPOCH register + WHEN S01 => + IF (ctrl_start_reg = '1' AND + ctrl_clear_epoch_reg = '1') THEN + next_state <= S13; + ELSIF (ctrl_start_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S01; + END IF; + -- Set interrupt + -- flag + WHEN S11 => + next_state <= S01; + -- Set NOT READY + -- register if modules + -- are NOT READY + WHEN S12 => + next_state <= S01; + -- Dummy cycle + WHEN S05 => + next_state <= S06; + -- Dummy cycle + WHEN S08 => + next_state <= S09; + -- Dummy cycle + -- and update + -- EPOCH + WHEN S04 => + next_state <= S05; + -- Dummy cycle + WHEN S09 => + next_state <= S10; + -- Clear EPOCH + -- register + WHEN S13 => + next_state <= S02; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + ctrl_epoch_reg, + ctrl_int_reg, + ctrl_not_rdy_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + ctrl_epoch_o <= ctrl_epoch_reg; + ctrl_int_o <= ctrl_int_reg; + ctrl_not_rdy_o <= ctrl_not_rdy_reg; + ctrl_rdy_o <= '0'; + ctrl_start1_o <= '0'; + ctrl_start2_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Start calculation + -- of Y + WHEN S03 => + ctrl_start1_o <= '1'; + -- Start calculation + -- of BIAS and W + WHEN S07 => + ctrl_start2_o <= '1'; + -- Wait for next + -- training or clear + -- EPOCH register + WHEN S01 => + ctrl_rdy_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00028_s_v02_latency_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00028_s_v02_latency_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00028_s_v02_latency_fsm.vhd (revision 8) @@ -0,0 +1,358 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00028_s_v02_latency_fsm IS + PORT( + clk_i : IN std_logic; + dw_i : IN DATA_T; + rst_n_i : IN std_logic; + cnt_alllat_o : OUT MEM_LAT_CNT_WIDTH_T; + cnteni_o : OUT std_logic; + cntenj_o : OUT std_logic; + ctrl_memerr_o : OUT std_logic; + ctrl_rdlat_o : OUT MEM_LAT_CNT_WIDTH_T; + ctrl_rdy_o : OUT std_logic; + ctrl_run_o : OUT std_logic; + ctrl_wrlat_o : OUT MEM_LAT_CNT_WIDTH_T; + dout_o : OUT DATA_T; + we_w_o : OUT std_logic + ); + +-- Declarations + +END p0300_m00028_s_v02_latency_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 2.0 2022/07/04 +-- - Introsuced latency for write +-- Revision 1.0 2022/07/02 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm OF p0300_m00028_s_v02_latency_fsm IS + + -- Architecture Declarations + SIGNAL cnt_alllat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_memerr_reg : std_logic; + SIGNAL ctrl_rdlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL ctrl_rdy_reg : std_logic; + SIGNAL ctrl_run_reg : std_logic; + SIGNAL ctrl_wrlat_reg : MEM_LAT_CNT_WIDTH_T; + SIGNAL dw_reg : DATA_T; + + TYPE STATE_TYPE IS ( + S00, + S01, + S02, + S03, + S04, + S06, + S05, + S08, + SERR, + S07, + SRDY, + S11, + S7, + S8 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + cnt_alllat_reg <= (others => '0'); + ctrl_memerr_reg <= '0'; + ctrl_rdlat_reg <= (others => '0'); + ctrl_rdy_reg <= '0'; + ctrl_run_reg <= '0'; + ctrl_wrlat_reg <= (others => '0'); + dw_reg <= (others => '0'); + ELSE + current_state <= next_state; + -- Default Assignment To Internals + cnt_alllat_reg <= cnt_alllat_reg; + ctrl_memerr_reg <= ctrl_memerr_reg; + ctrl_rdlat_reg <= ctrl_rdlat_reg; + ctrl_rdy_reg <= ctrl_rdy_reg; + ctrl_run_reg <= ctrl_run_reg; + ctrl_wrlat_reg <= ctrl_wrlat_reg; + dw_reg <= dw_i; + + -- Combined Actions + CASE current_state IS + -- Reset state + WHEN S00 => + ctrl_run_reg <= '1'; + ctrl_rdy_reg <= '0'; + -- Init values + WHEN S01 => + ctrl_wrlat_reg <= (others => '0'); + ctrl_memerr_reg <= '0'; + -- Wait for max + -- latency + WHEN S03 => + ctrl_wrlat_reg <= ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH-2 downto 0 ) & '1'; + -- Last address + -- [1][1] + WHEN S04 => + ctrl_wrlat_reg <= (others => '0'); + -- Write -1 to + -- last address + -- [1][1] + WHEN S06 => + ctrl_wrlat_reg <= (others => '0'); + -- Wait for max + -- latency + WHEN S05 => + ctrl_wrlat_reg <= ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH-2 downto 0 ) & '1'; + -- Release END + -- conditions (for) + WHEN S08 => + cnt_alllat_reg <= (others => '0'); + ctrl_wrlat_reg <= (others => '0'); + ctrl_rdlat_reg <= (others => '0'); + -- Memory + -- ERROR + WHEN SERR => + ctrl_memerr_reg <= '1'; + ctrl_run_reg <= '0'; + -- Wait for max + -- latency + WHEN S07 => + ctrl_wrlat_reg <= ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH-2 downto 0 ) & '1'; + -- END / READY + -- state + WHEN SRDY => + ctrl_rdy_reg <= '1'; + ctrl_run_reg <= '0'; + -- Address [0][0] + -- reaches memory + -- WS=1...max + WHEN S11 => + cnt_alllat_reg <= unsigned (cnt_alllat_reg) + 1; + ctrl_rdlat_reg <= ctrl_rdlat_reg ( MEM_LAT_CNT_WIDTH-2 downto 0 ) & '1'; + IF (signed (dw_reg) = 0) THEN + cnt_alllat_reg <= cnt_alllat_reg; + ctrl_rdlat_reg <= ctrl_rdlat_reg; + END IF; + -- Wait for + -- dw_i = -1 + WHEN S8 => + ctrl_wrlat_reg <= ctrl_wrlat_reg ( MEM_LAT_CNT_WIDTH-2 downto 0 ) & '1'; + IF (signed (dw_reg) = -1) THEN + ctrl_wrlat_reg <= ctrl_wrlat_reg; + END IF; + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + ctrl_rdlat_reg, + ctrl_wrlat_reg, + current_state, + dw_reg + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Reset state + WHEN S00 => + next_state <= S01; + -- Init values + WHEN S01 => + next_state <= S02; + -- Write 0 to + -- first address + -- [0][0] + WHEN S02 => + next_state <= S03; + -- Wait for max + -- latency + WHEN S03 => + IF (signed (ctrl_wrlat_reg) = -1) THEN + next_state <= S04; + ELSE + next_state <= S03; + END IF; + -- Last address + -- [1][1] + WHEN S04 => + next_state <= S05; + -- Write -1 to + -- last address + -- [1][1] + WHEN S06 => + next_state <= S07; + -- Wait for max + -- latency + WHEN S05 => + IF (signed (ctrl_wrlat_reg) = -1) THEN + next_state <= S06; + ELSE + next_state <= S05; + END IF; + -- Release END + -- conditions (for) + WHEN S08 => + IF (signed (dw_reg) = -1) THEN + next_state <= S11; + ELSE + -- -1 not read on dw + -- after max latency + -- time causes ERROR + next_state <= SERR; + END IF; + -- Memory + -- ERROR + WHEN SERR => + next_state <= SERR; + -- Wait for max + -- latency + WHEN S07 => + IF (signed (ctrl_wrlat_reg) = -1) THEN + next_state <= S08; + ELSE + next_state <= S07; + END IF; + -- END / READY + -- state + WHEN SRDY => + next_state <= SRDY; + -- Address [0][0] + -- reaches memory + -- WS=1...max + WHEN S11 => + IF (signed (dw_reg) = 0) THEN + next_state <= S7; + ELSIF (signed (ctrl_rdlat_reg) = -1) THEN + next_state <= SERR; + ELSE + next_state <= S11; + END IF; + -- Write -1 to + -- last address + -- [1][1] + WHEN S7 => + next_state <= S8; + -- Wait for + -- dw_i = -1 + WHEN S8 => + IF (signed (dw_reg) = -1) THEN + next_state <= SRDY; + ELSIF (signed (ctrl_wrlat_reg) = -1) THEN + next_state <= SERR; + ELSE + next_state <= S8; + END IF; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + cnt_alllat_reg, + ctrl_memerr_reg, + ctrl_rdlat_reg, + ctrl_rdy_reg, + ctrl_run_reg, + ctrl_wrlat_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnt_alllat_o <= cnt_alllat_reg; + cnteni_o <= '0'; + cntenj_o <= '0'; + ctrl_memerr_o <= ctrl_memerr_reg; + ctrl_rdlat_o <= ctrl_rdlat_reg; + ctrl_rdy_o <= ctrl_rdy_reg; + ctrl_run_o <= ctrl_run_reg; + ctrl_wrlat_o <= ctrl_wrlat_reg; + dout_o <= (others => '0'); + we_w_o <= '0'; + + -- Combined Actions + CASE current_state IS + -- Write 0 to + -- first address + -- [0][0] + WHEN S02 => + dout_o <= (others => '0'); + we_w_o <= '1'; + -- Last address + -- [1][1] + WHEN S04 => + cnteni_o <= '1'; + cntenj_o <= '1'; + -- Write -1 to + -- last address + -- [1][1] + WHEN S06 => + dout_o <= (others => '1'); + we_w_o <= '1'; + -- Release END + -- conditions (for) + WHEN S08 => + cnteni_o <= '1'; + cntenj_o <= '1'; + -- Write -1 to + -- last address + -- [1][1] + WHEN S7 => + dout_o <= (others => '1'); + we_w_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00033_s_v01_for_loop_memwi_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00033_s_v01_for_loop_memwi_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00033_s_v01_for_loop_memwi_fsm.vhd (revision 8) @@ -0,0 +1,252 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00033_s_v01_for_loop_memwi_fsm IS + PORT( + clk_i : IN std_logic; + cnten1_i : IN std_logic; + cnten2_i : IN std_logic; + cnten3_i : IN std_logic; + cnten4_i : IN std_logic; + cnten5_i : IN std_logic; + cnten7_i : IN std_logic; + rst_n_i : IN std_logic; + set_init_i : IN std_logic; + start_vali_i : IN ADDRESS_S_T; + stop_vali_i : IN ADDRESS_S_T; + cnt_end_o : OUT std_logic; + cnt_rdy_o : OUT std_logic; + cnt_val_o : OUT ADDRESS_S_T + ); + +-- Declarations + +END p0300_m00033_s_v01_for_loop_memwi_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 1.0 2022/06/09 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm_behv OF p0300_m00033_s_v01_for_loop_memwi_fsm IS + + -- Architecture Declarations + SIGNAL cnt_end_reg : std_logic; + SIGNAL cnt_reg : ADDRESS_S_T; + SIGNAL cnten_reg : std_logic; + SIGNAL set_init_reg : std_logic; + + TYPE STATE_TYPE IS ( + S01, + S02, + S03, + S06, + S04, + S05, + S00 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + cnt_end_reg <= '0'; + cnt_reg <= (others => '0'); + cnten_reg <= '0'; + set_init_reg <= '0'; + ELSE + current_state <= next_state; + -- Default Assignment To Internals + cnt_end_reg <= '0'; + cnt_reg <= cnt_reg; + cnten_reg <= cnten1_i OR cnten2_i OR cnten3_i OR cnten4_i OR cnten5_i OR cnten7_i; + set_init_reg <= set_init_i; + + -- Combined Actions + CASE current_state IS + -- Start loop + WHEN S01 => + cnt_reg <= start_vali_i; + -- COUNT + + WHEN S02 => + cnt_reg <= unsigned (cnt_reg) + 1; + IF (cnt_reg = unsigned (stop_vali_i) - 1 OR + set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- Wait for next + -- count enable. + WHEN S03 => + IF (set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- COUNT - + WHEN S04 => + cnt_reg <= unsigned (cnt_reg) - 1; + IF (cnt_reg = unsigned (stop_vali_i) + 1 OR + set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- Wait for next + -- count enable. + WHEN S05 => + IF (set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnt_reg, + cnten_reg, + current_state, + set_init_reg, + start_vali_i, + stop_vali_i + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Start loop + WHEN S01 => + IF (cnten_reg = '1' AND + unsigned (stop_vali_i) > unsigned (start_vali_i)) THEN + next_state <= S02; + ELSIF (cnten_reg = '1' AND + unsigned (stop_vali_i) < unsigned (start_vali_i)) THEN + next_state <= S04; + ELSE + next_state <= S01; + END IF; + -- COUNT + + WHEN S02 => + IF (cnt_reg = unsigned (stop_vali_i) - 1 OR + set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '0') THEN + next_state <= S03; + ELSE + next_state <= S02; + END IF; + -- Wait for next + -- count enable. + WHEN S03 => + IF (set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S03; + END IF; + -- End-of-count + -- or cancel. + WHEN S06 => + IF (cnten_reg = '1' OR + set_init_reg = '1') THEN + next_state <= S01; + ELSE + next_state <= S06; + END IF; + -- COUNT - + WHEN S04 => + IF (cnt_reg = unsigned (stop_vali_i) + 1 OR + set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '0') THEN + next_state <= S05; + ELSE + next_state <= S04; + END IF; + -- Wait for next + -- count enable. + WHEN S05 => + IF (set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '1') THEN + next_state <= S04; + ELSE + next_state <= S05; + END IF; + -- Reset state + WHEN S00 => + next_state <= S01; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + cnt_end_reg, + cnt_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnt_end_o <= cnt_end_reg; + cnt_rdy_o <= '0'; + cnt_val_o <= cnt_reg; + + -- Combined Actions + CASE current_state IS + -- Start loop + WHEN S01 => + cnt_rdy_o <= '1'; + -- End-of-count + -- or cancel. + WHEN S06 => + cnt_end_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm_behv; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00034_s_v01_for_loop_memwj_fsm.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00034_s_v01_for_loop_memwj_fsm.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00034_s_v01_for_loop_memwj_fsm.vhd (revision 8) @@ -0,0 +1,252 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00034_s_v01_for_loop_memwj_fsm IS + PORT( + clk_i : IN std_logic; + cnten1_i : IN std_logic; + cnten2_i : IN std_logic; + cnten3_i : IN std_logic; + cnten4_i : IN std_logic; + cnten5_i : IN std_logic; + cnten7_i : IN std_logic; + rst_n_i : IN std_logic; + set_init_i : IN std_logic; + start_valj_i : IN ADDRESS_T_T; + stop_valj_i : IN ADDRESS_T_T; + cnt_end_o : OUT std_logic; + cnt_rdy_o : OUT std_logic; + cnt_val_o : OUT ADDRESS_T_T + ); + +-- Declarations + +END p0300_m00034_s_v01_for_loop_memwj_fsm ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 1.0 2022/06/09 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ARCHITECTURE fsm_behv OF p0300_m00034_s_v01_for_loop_memwj_fsm IS + + -- Architecture Declarations + SIGNAL cnt_end_reg : std_logic; + SIGNAL cnt_reg : ADDRESS_T_T; + SIGNAL cnten_reg : std_logic; + SIGNAL set_init_reg : std_logic; + + TYPE STATE_TYPE IS ( + S01, + S02, + S03, + S06, + S04, + S05, + S00 + ); + + -- Declare current and next state signals + SIGNAL current_state : STATE_TYPE; + SIGNAL next_state : STATE_TYPE; + +BEGIN + + ----------------------------------------------------------------- + clocked_proc : PROCESS ( + clk_i + ) + ----------------------------------------------------------------- + BEGIN + IF (clk_i'EVENT AND clk_i = '1') THEN + IF (rst_n_i = '0') THEN + current_state <= S00; + -- Default Reset Values + cnt_end_reg <= '0'; + cnt_reg <= (others => '0'); + cnten_reg <= '0'; + set_init_reg <= '0'; + ELSE + current_state <= next_state; + -- Default Assignment To Internals + cnt_end_reg <= '0'; + cnt_reg <= cnt_reg; + cnten_reg <= cnten1_i OR cnten2_i OR cnten3_i OR cnten4_i OR cnten5_i OR cnten7_i; + set_init_reg <= set_init_i; + + -- Combined Actions + CASE current_state IS + -- Start loop + WHEN S01 => + cnt_reg <= start_valj_i; + -- COUNT + + WHEN S02 => + cnt_reg <= unsigned (cnt_reg) + 1; + IF (cnt_reg = unsigned (stop_valj_i) - 1 OR + set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- Wait for next + -- count enable. + WHEN S03 => + IF (set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- COUNT - + WHEN S04 => + cnt_reg <= unsigned (cnt_reg) - 1; + IF (cnt_reg = unsigned (stop_valj_i) + 1 OR + set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + -- Wait for next + -- count enable. + WHEN S05 => + IF (set_init_reg = '1') THEN + cnt_end_reg <= '1'; + END IF; + WHEN OTHERS => + NULL; + END CASE; + END IF; + END IF; + END PROCESS clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : PROCESS ( + cnt_reg, + cnten_reg, + current_state, + set_init_reg, + start_valj_i, + stop_valj_i + ) + ----------------------------------------------------------------- + BEGIN + CASE current_state IS + -- Start loop + WHEN S01 => + IF (cnten_reg = '1' AND + unsigned (stop_valj_i) > unsigned (start_valj_i)) THEN + next_state <= S02; + ELSIF (cnten_reg = '1' AND + unsigned (stop_valj_i) < unsigned (start_valj_i)) THEN + next_state <= S04; + ELSE + next_state <= S01; + END IF; + -- COUNT + + WHEN S02 => + IF (cnt_reg = unsigned (stop_valj_i) - 1 OR + set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '0') THEN + next_state <= S03; + ELSE + next_state <= S02; + END IF; + -- Wait for next + -- count enable. + WHEN S03 => + IF (set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '1') THEN + next_state <= S02; + ELSE + next_state <= S03; + END IF; + -- End-of-count + -- or cancel. + WHEN S06 => + IF (cnten_reg = '1' OR + set_init_reg = '1') THEN + next_state <= S01; + ELSE + next_state <= S06; + END IF; + -- COUNT - + WHEN S04 => + IF (cnt_reg = unsigned (stop_valj_i) + 1 OR + set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '0') THEN + next_state <= S05; + ELSE + next_state <= S04; + END IF; + -- Wait for next + -- count enable. + WHEN S05 => + IF (set_init_reg = '1') THEN + next_state <= S06; + ELSIF (cnten_reg = '1') THEN + next_state <= S04; + ELSE + next_state <= S05; + END IF; + -- Reset state + WHEN S00 => + next_state <= S01; + WHEN OTHERS => + next_state <= S00; + END CASE; + END PROCESS nextstate_proc; + + ----------------------------------------------------------------- + output_proc : PROCESS ( + cnt_end_reg, + cnt_reg, + current_state + ) + ----------------------------------------------------------------- + BEGIN + -- Default Assignment + cnt_end_o <= cnt_end_reg; + cnt_rdy_o <= '0'; + cnt_val_o <= cnt_reg; + + -- Combined Actions + CASE current_state IS + -- Start loop + WHEN S01 => + cnt_rdy_o <= '1'; + -- End-of-count + -- or cancel. + WHEN S06 => + cnt_end_o <= '1'; + WHEN OTHERS => + NULL; + END CASE; + END PROCESS output_proc; + +END fsm_behv; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00100_s_v01_mem_gen_blk.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00100_s_v01_mem_gen_blk.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00100_s_v01_mem_gen_blk.vhd (revision 8) @@ -0,0 +1,185 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + +ENTITY p0300_m00100_s_v01_mem_gen_blk IS + PORT( + addr_i_i : IN ADDRESS_S_T; + addr_j_i : IN ADDRESS_T_T; + clk_i : IN std_logic; + din1_i : IN DATA_T; + din2_i : IN DATA_T; + din3_i : IN DATA_T; + din4_i : IN DATA_T; + din5_i : IN DATA_T; + din7_i : IN DATA_T; + we_bias2_i : IN std_logic; + we_bias3_i : IN std_logic; + we_bias5_i : IN std_logic; + we_s3_i : IN std_logic; + we_s4_i : IN std_logic; + we_s5_i : IN std_logic; + we_t3_i : IN std_logic; + we_t4_i : IN std_logic; + we_t5_i : IN std_logic; + we_w2_i : IN std_logic; + we_w3_i : IN std_logic; + we_w4_i : IN std_logic; + we_w5_i : IN std_logic; + we_w7_i : IN std_logic; + we_y1_i : IN std_logic; + we_y3_i : IN std_logic; + we_y5_i : IN std_logic; + dbias_o : OUT DATA_T; + ds_o : OUT DATA_T; + dt_o : OUT DATA_T; + dw_o : OUT DATA_T; + dy_o : OUT DATA_T + ); + +-- Declarations + +END p0300_m00100_s_v01_mem_gen_blk ; +-- COPYRIGHT (C) 2022 Jens Gutschmidt / +-- VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 1.0 2022/05/25 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.ALL; + + +ARCHITECTURE struct OF p0300_m00100_s_v01_mem_gen_blk IS + + -- Architecture declarations + + -- Internal signal declarations + SIGNAL addr_ij_oi : ADDRESS_W_T; + SIGNAL din_oi : DATA_T; + SIGNAL we_bias_oi : std_logic; + SIGNAL we_s_oi : std_logic; + SIGNAL we_t_oi : std_logic; + SIGNAL we_w_oi : std_logic; + SIGNAL we_y_oi : std_logic; + + + -- Component Declarations + COMPONENT p0300_m00101_m_v01_mem_t + PORT ( + addr_i : IN ADDRESS_T_T; + clk_i : IN std_logic; + d_i : IN DATA_T; + we_i : IN std_logic; + d_o : OUT DATA_T + ); + END COMPONENT; + COMPONENT p0300_m00102_s_v01_mem_w + PORT ( + addr_i : IN ADDRESS_W_T; + clk_i : IN std_logic; + d_i : IN DATA_T; + we_i : IN std_logic; + d_o : OUT DATA_T + ); + END COMPONENT; + COMPONENT p0300_m00103_s_v01_mem_s + PORT ( + addr_i : IN ADDRESS_S_T; + clk_i : IN std_logic; + d_i : IN DATA_T; + we_i : IN std_logic; + d_o : OUT DATA_T + ); + END COMPONENT; + + -- Optional embedded configurations + -- pragma synthesis_off + FOR ALL : p0300_m00101_m_v01_mem_t USE ENTITY work.p0300_m00101_m_v01_mem_t; + FOR ALL : p0300_m00102_s_v01_mem_w USE ENTITY work.p0300_m00102_s_v01_mem_w; + FOR ALL : p0300_m00103_s_v01_mem_s USE ENTITY work.p0300_m00103_s_v01_mem_s; + -- pragma synthesis_on + + +BEGIN + -- Architecture concurrent statements + -- HDL Embedded Text Block 2 eb2 + -- eb1 1 + addr_ij_oi <= addr_j_i & addr_i_i; + we_s_oi <= we_s3_i OR we_s4_i OR we_s5_i; + we_t_oi <= we_t3_i OR we_t4_i OR we_t5_i; + we_w_oi <= we_w2_i OR we_w3_i OR we_w4_i OR we_w5_i OR we_w7_i; + we_y_oi <= we_y1_i OR we_y3_i OR we_y5_i; + we_bias_oi <= we_bias2_i OR we_bias3_i OR we_bias5_i; + din_oi <= din1_i OR din2_i OR din3_i OR din4_i OR din5_i OR din7_i; + + + -- Instance port mappings. + U_1 : p0300_m00101_m_v01_mem_t + PORT MAP ( + clk_i => clk_i, + we_i => we_t_oi, + d_i => din_oi, + addr_i => addr_j_i, + d_o => dt_o + ); + U_2 : p0300_m00101_m_v01_mem_t + PORT MAP ( + clk_i => clk_i, + we_i => we_y_oi, + d_i => din_oi, + addr_i => addr_j_i, + d_o => dy_o + ); + U_3 : p0300_m00101_m_v01_mem_t + PORT MAP ( + clk_i => clk_i, + we_i => we_bias_oi, + d_i => din_oi, + addr_i => addr_j_i, + d_o => dbias_o + ); + U_4 : p0300_m00102_s_v01_mem_w + PORT MAP ( + clk_i => clk_i, + we_i => we_w_oi, + d_i => din_oi, + addr_i => addr_ij_oi, + d_o => dw_o + ); + U_0 : p0300_m00103_s_v01_mem_s + PORT MAP ( + clk_i => clk_i, + we_i => we_s_oi, + d_i => din_oi, + addr_i => addr_i_i, + d_o => ds_o + ); + +END struct; Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00101_m_v01_mem_t.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00101_m_v01_mem_t.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00101_m_v01_mem_t.vhd (revision 8) @@ -0,0 +1,69 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +-- Versions: +-- +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.all; + +LIBRARY work; + +entity p0300_m00101_m_v01_mem_t is + port( + clk_i : in std_logic; -- Single Clock Input + we_i : in std_logic; -- Write Enable Input + d_i : in DATA_T; -- Data Input + addr_i : in ADDRESS_T_T; -- Address Input + d_o : out DATA_T -- Data Output + ); +end entity p0300_m00101_m_v01_mem_t; + +-- +architecture p0300_mem_t_arch of p0300_m00101_m_v01_mem_t is + + signal addr_reg : ADDRESS_T_T; -- Address register + signal din_reg : DATA_T; + signal we_reg : std_logic; + signal t_ram : T_RAM_T; -- "t output" memory array + attribute logic_block : boolean; + attribute logic_block of t_ram : signal is true; + + +begin + + mem_s_proc: process (clk_i) + begin + if (clk_i'event and clk_i='1') then + if (we_reg = '1') then + t_ram(CONV_INTEGER(unsigned(addr_i))) <= din_reg; + end if; + addr_reg <= addr_i; + din_reg <= d_i; + we_reg <= we_i; + end if; + end process mem_s_proc; + d_o <= t_ram(CONV_INTEGER(unsigned(addr_reg))); + +end architecture p0300_mem_t_arch; + Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00102_s_v01_mem_w.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00102_s_v01_mem_w.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00102_s_v01_mem_w.vhd (revision 8) @@ -0,0 +1,69 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +-- Versions: +-- +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.all; + +LIBRARY work; + +entity p0300_m00102_s_v01_mem_w is + port( + clk_i : in std_logic; -- Single Clock Input + we_i : in std_logic; -- Write Enable Input + d_i : in DATA_T; -- Data Input + addr_i : in ADDRESS_W_T; -- Address Input + d_o : out DATA_T -- Data Output + ); +end entity p0300_m00102_s_v01_mem_w; + +-- +architecture p0300_mem_w_arch of p0300_m00102_s_v01_mem_w is + + signal addr_reg : ADDRESS_W_T; -- Address register + signal din_reg : DATA_T; + signal we_reg : std_logic; + signal w_ram : W_RAM_T; -- w (weights) memory + attribute logic_block : boolean; + attribute logic_block of w_ram : signal is true; + + +begin + + mem_s_proc: process (clk_i) + begin + if (clk_i'event and clk_i='1') then + if (we_reg = '1') then + w_ram(CONV_INTEGER(unsigned(addr_i))) <= din_reg; + end if; + addr_reg <= addr_i; + din_reg <= d_i; + we_reg <= we_i; + end if; + end process mem_s_proc; + d_o <= w_ram(CONV_INTEGER(unsigned(addr_reg))); + +end architecture p0300_mem_w_arch; + Index: neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00103_s_v01_mem_s.vhd =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00103_s_v01_mem_s.vhd (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/rtl/vhdl/p0300_m00103_s_v01_mem_s.vhd (revision 8) @@ -0,0 +1,69 @@ +-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland +-- (email: opencores@vivare-services.com) +-- +-- This program is free software: you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any +-- later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- +-- Versions: +-- +-- Revision 1.0 2022/06/12 +-- -- First draft +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +--USE ieee.numeric_std.all; +LIBRARY work; +USE work.memory_vhd_v03_pkg.all; + +LIBRARY work; + +entity p0300_m00103_s_v01_mem_s is + port( + clk_i : in std_logic; -- Single Clock Input + we_i : in std_logic; -- Write Enable Input + d_i : in DATA_T; -- Data Input + addr_i : in ADDRESS_S_T; -- Address Input + d_o : out DATA_T -- Data Output + ); +end entity p0300_m00103_s_v01_mem_s; + +-- +architecture p0300_mem_s_arch of p0300_m00103_s_v01_mem_s is + + signal addr_reg : ADDRESS_S_T; -- Address register + signal din_reg : DATA_T; + signal we_reg : std_logic; + signal s_ram : S_RAM_T; -- "s input" memory array + attribute logic_block : boolean; + attribute logic_block of s_ram : signal is true; + + +begin + + mem_s_proc: process (clk_i) + begin + if (clk_i'event and clk_i='1') then + if (we_reg = '1') then + s_ram(CONV_INTEGER(unsigned(addr_i))) <= din_reg; + end if; + addr_reg <= addr_i; + din_reg <= d_i; + we_reg <= we_i; + end if; + end process mem_s_proc; + d_o <= s_ram(CONV_INTEGER(unsigned(addr_reg))); + +end architecture p0300_mem_s_arch; + Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/00_README.txt =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/00_README.txt (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/00_README.txt (revision 8) @@ -0,0 +1,8 @@ +Your environment must point to a valid installation of Questasim. +You need Questasim to run all tests and features. +It was NOT tested with Modelsim DE/PE or SE (SE:2021.3 last version - Questasim since 2021.Q4) +Intel's Questa FPGA Edition runs well also. + +Run "sim_start" to run the pre-defined test bench "tb_avm_instruction_gen_v04_public.vhd" +located in folder /tb/vhdl/. + Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/01_sim_start.bat =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/01_sim_start.bat (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/01_sim_start.bat (revision 8) @@ -0,0 +1,2 @@ +rem Script to start the simulation +vsim -f 02_sim_args.txt Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/02_sim_args.txt =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/02_sim_args.txt (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/02_sim_args.txt (revision 8) @@ -0,0 +1 @@ + -do 04_tb_avm_instruction_gen_v04_public.do \ No newline at end of file Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/03_file_list.txt =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/03_file_list.txt (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/03_file_list.txt (revision 8) @@ -0,0 +1,19 @@ +"../rtl/vhdl/memory_vhd_v03_pkg.vhd" +"../rtl/vhdl/p0300_m00022_s_v02_cal_y_fsm.vhd" +"../rtl/vhdl/p0300_m00034_s_v01_for_loop_memwj_fsm.vhd" +"../rtl/vhdl/p0300_m00024_s_v02_test_fsm.vhd" +"../rtl/vhdl/p0300_m00026_s_v02_rd_wr_fsm.vhd" +"../rtl/vhdl/p0300_m00027_s_v01_train_fsm.vhd" +"../rtl/vhdl/p0300_m00028_s_v02_latency_fsm.vhd" +"../rtl/vhdl/p0300_m00021_s_v03_wishbone_fsm.vhd" +"../rtl/vhdl/p0300_m00033_s_v01_for_loop_memwi_fsm.vhd" +"../rtl/vhdl/p0300_m00023_s_v02_cal_w_fsm.vhd" +"../rtl/vhdl/p0300_m00025_s_v02_init_fsm.vhd" +"../rtl/vhdl/p0300_m00020_s_v03_perceptron_blk.vhd" +"../rtl/vhdl/p0300_m00103_s_v01_mem_s.vhd" +"../rtl/vhdl/p0300_m00101_m_v01_mem_t.vhd" +"../rtl/vhdl/p0300_m00102_s_v01_mem_w.vhd" +"../rtl/vhdl/p0300_m00100_s_v01_mem_gen_blk.vhd" +"../rtl/vhdl/p0300_m00000_s_v03_top_level_blk.vhd" + + Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/04_tb_avm_instruction_gen_v04_public.do =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/04_tb_avm_instruction_gen_v04_public.do (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/04_tb_avm_instruction_gen_v04_public.do (revision 8) @@ -0,0 +1,292 @@ +# generate foreign module declaration +onerror {resume} + +# create library +if [file exists {./work}] { + vdel -all {./work} +} +vlib {./work} + +# +# Add logical mapping >work< to the local design simulation library +# +vmap work {./work} + +#pwd + + +# +# Open debugging windows +# +quietly view * + +# +# Start and run simulation +# +set StdArithNoWarnings 1 +vcom -work "work" -nologo -2008 -F 03_file_list.txt +vcom -work "work" -nologo -93 ../tb/vhdl/tb_avm_instruction_gen_v04_public.vhd + +vsim -no_autoacc -L work -coverage -voptargs="+cover=bcesfx" -l transcript.txt -i -multisource_delay latest -t ns +typdelays work.tb_avm_instruction_gen_v04_public(testbench) + +assertion active +assertion profile on +assertion report -verbose + + +configure wave -namecolwidth 450 +#configure wave -valuecolwidth 145 +configure wave -valuecolwidth 120 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ps +update + + +# View the results. +#if {![batch_mode]} { + + quietly add wave -divider TB_TOP_LEVEL + quietly add wave -expand /stream01 + quietly add wave -expand /stream02 + quietly add wave -group TB_TOP_LEVEL /* + + quietly add wave -divider TOP_LEVEL + quietly add wave -group TOP_LEVEL /u_0/* + + quietly add wave -divider PERCEPTRON + quietly add wave -group PERCEPTRON /u_0/u_0/* + + quietly add wave -divider WISHBONE + quietly add wave -group WISHBONE /u_0/u_0/u_14/* + + quietly add wave -divider FOR_LOOP_I + quietly add wave -group FOR_LOOP_I /u_0/u_0/u_2/* + + quietly add wave -divider FOR_LOOP_J + quietly add wave -group FOR_LOOP_J /u_0/u_0/u_1/* + + quietly add wave -divider CAL_Y + quietly add wave -group CAL_Y /u_0/u_0/u_0/* + + quietly add wave -divider CAL_W + quietly add wave -group CAL_W /u_0/u_0/u_8/* + + quietly add wave -divider INIT + quietly add wave -group INIT /u_0/u_0/u_9/* + + quietly add wave -divider TEST + quietly add wave -group TEST /u_0/u_0/u_10/* + + quietly add wave -divider READ_WRITE + quietly add wave -group READ_WRITE /u_0/u_0/u_11/* + + quietly add wave -divider TRAINING + quietly add wave -group TRAINING /u_0/u_0/u_12/* + + quietly add wave -divider LATENCY + quietly add wave -group LATENCY /u_0/u_0/u_13/* + + quietly add wave -divider S-MEMORY + quietly add wave -group S-MEMORY /u_0/u_1/u_0/* + + quietly add wave -divider T-MEMORY + quietly add wave -group T-MEMORY /u_0/u_1/u_1/* + + quietly add wave -divider Y-MEMORY + quietly add wave -group Y-MEMORY /u_0/u_1/u_2/* + + quietly add wave -divider BIAS-MEMORY + quietly add wave -group BIAS-MEMORY /u_0/u_1/u_3/* + + quietly add wave -divider W-MEMORY + quietly add wave -group W-MEMORY /u_0/u_1/u_4/* + + #quietly add wave -r /* + +#} + +run -all +quietly wave zoomfull +update + +#U_0/U_0/U_0 +coverage exclude -du p0300_m00022_s_v02_cal_y_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + S12->S00 \ + S13->S00 \ + S14->S00 \ + S15->S00 \ + S16->S00 + +#U_0/U_0/U_1 +coverage exclude -du p0300_m00034_s_v01_for_loop_memwj_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 + +#U_0/U_0/U_2 +coverage exclude -du p0300_m00033_s_v01_for_loop_memwi_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 + +#U_0/U_0/U_8 +coverage exclude -du p0300_m00023_s_v02_cal_w_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + S12->S00 \ + S13->S00 \ + S14->S00 \ + S15->S00 \ + S16->S00 + +#U_0/U_0/U_9 +coverage exclude -du p0300_m00025_s_v02_init_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 + +#U_0/U_0/U_10 +coverage exclude -du p0300_m00024_s_v02_test_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + S12->S00 \ + S13->S00 \ + S14->S00 \ + S15->S00 \ + S16->S00 \ + S17->S00 + +#U_0/U_0/U_11 +coverage exclude -du p0300_m00026_s_v02_rd_wr_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S12->S00 \ + S22->S00 \ + S32->S00 \ + S42->S00 \ + S03->S00 \ + S04->S00 + +#U_0/U_0/U_12 +coverage exclude -du p0300_m00027_s_v01_train_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + S12->S00 \ + S13->S00 + +#U_0/U_0/U_13 +coverage exclude -du p0300_m00028_s_v02_latency_fsm -ftrans current_state S01->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + SRDY->S00 \ + SERR->S00 + +#U_0/U_0/U_14 +coverage exclude -du p0300_m00021_s_v03_wishbone_fsm -ftrans current_state S01->S00 \ + S01a->S00 \ + S02->S00 \ + S03->S00 \ + S04->S00 \ + S05->S00 \ + S06->S00 \ + S07->S00 \ + S08->S00 \ + S09->S00 \ + S10->S00 \ + S11->S00 \ + S12->S00 \ + S13->S00 \ + S14->S00 \ + S15->S00 \ + S16->S00 \ + S17->S00 \ + S18->S00 \ + S19->S00 \ + S20->S00 \ + S21->S00 \ + S22->S00 \ + S23->S00 \ + S24->S00 \ + S25->S00 \ + S26->S00 \ + S27->S00 \ + S28->S00 \ + S29->S00 \ + S30->S00 \ + S31->S00 \ + S32->S00 \ + S33->S00 \ + S34->S00 \ + S35->S00 \ + S36->S00 \ + S37->S00 \ + S38->S00 \ + S39->S00 \ + S40->S00 \ + S41->S00 \ + S42->S00 \ + S43->S00 \ + S44->S00 \ + S45->S00 \ + S46->S00 \ + S47->S00 \ + S48->S00 + Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/11_wave_golden_20220721.do =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/11_wave_golden_20220721.do (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/11_wave_golden_20220721.do (revision 8) @@ -0,0 +1,541 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -divider TB_TOP_LEVEL +add wave -noupdate /tb_avm_instruction_gen_v04_public/stream01 +add wave -noupdate -height 29 /tb_avm_instruction_gen_v04_public/stream02 +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/clk_gen_o +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/rst_proc_o +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/rst_run_proc_o +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_adri_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_adro_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_dout_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_stb_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_cyc_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_we_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_ack_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_din_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_clear_epoch_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/tb_wb_thres_oi +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/done +add wave -noupdate -group TB_TOP_LEVEL -height 29 /tb_avm_instruction_gen_v04_public/stream02 +add wave -noupdate -group TB_TOP_LEVEL /tb_avm_instruction_gen_v04_public/stream01 +add wave -noupdate -divider TOP_LEVEL +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_adr_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_clk_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_cyc_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_dat_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_rst_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_stb_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_we_i +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/ctrl_int_o +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_ack_o +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/wb_dat_o +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/addr_i_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/addr_j_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dbias_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout1_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout2_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout4_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout5_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dout7_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/ds_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dt_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dw_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/dy_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_bias2_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_bias3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_bias5_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_s3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_s4_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_s5_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_t3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_t4_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_t5_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_w2_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_w3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_w4_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_w5_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_w7_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_y1_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_y3_oi +add wave -noupdate -group TOP_LEVEL /tb_avm_instruction_gen_v04_public/U_0/we_y5_oi +add wave -noupdate -divider PERCEPTRON +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/clk_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dbias_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ds_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dt_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dw_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dy_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/rst_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_adr_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_cyc_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_dat_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_stb_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_we_i +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/addr_i_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/addr_j_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_int_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout1_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout2_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout4_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/dout7_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_ack_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/wb_dat_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_bias2_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_bias3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_bias5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_s3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_s4_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_s5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_t3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_t4_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_t5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_w2_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_w3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_w4_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_w5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_w7_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_y1_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_y3_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/we_y5_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnt_alllat_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni1_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni2_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni3_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni4_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni5_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnteni7_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj1_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj2_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj3_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj4_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj5_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntenj7_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnti_end_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cnti_rdy_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntj_end_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/cntj_rdy_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_bias_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_clear_epoch_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_complete_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_din_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_dout_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_dout_valid_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_epoch_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_int4_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_int6_o +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_maxepoch_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_memerr_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_not_rdy6_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_offset_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rd_vec_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdlat_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy1_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy2_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy3_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy4_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy5_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy6_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_rdy7_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_run7_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start1_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start2_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start3_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start4_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start5_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_start6_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_thres_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_wchgd_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_wr_vec_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/ctrl_wrlat_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/rst_n_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/set_initi_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/set_initj_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/starti_val_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/startj_val_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/stopi_val_oi +add wave -noupdate -group PERCEPTRON /tb_avm_instruction_gen_v04_public/U_0/U_0/stopj_val_oi +add wave -noupdate -divider WISHBONE +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/clk_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_alllat_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_complete_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_dout_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_dout_valid_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_epoch_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_test_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_train_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_memerr_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_not_rdy6_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdlat_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy1_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy2_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy3_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy4_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy5_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy6_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_run7_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_wrlat_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/rst_n_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_adr_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_cyc_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_dat_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_stb_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_we_i +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_bias_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_clear_epoch_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_din_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_maxepoch_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_offset_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rd_vec_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_set_starti_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_set_startj_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_start3_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_start4_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_start5_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_start6_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_starti_val_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_startj_val_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_stopi_val_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_stopj_val_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_thres_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_wr_vec_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_ack_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_dat_o +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_bias_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_complete_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_din_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_en_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_test_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_int_train_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_maxepoch_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_offset_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rd_vec_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_rdy_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_starti_val_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_startj_val_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_stat_a_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_stopi_val_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_stopj_val_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_thres_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/ctrl_wr_vec_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_adr_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_cyc_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_dat_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_stb_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/wb_we_reg +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/zero_net_addrs +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/zero_net_addrt +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/current_state +add wave -noupdate -group WISHBONE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_14/next_state +add wave -noupdate -divider FOR_LOOP_I +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/clk_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten1_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten2_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten3_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten4_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten5_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten7_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/rst_n_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/set_init_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/start_vali_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/stop_vali_i +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnt_end_o +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnt_rdy_o +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnt_val_o +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnt_end_reg +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnt_reg +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/cnten_reg +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/set_init_reg +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/current_state +add wave -noupdate -group FOR_LOOP_I /tb_avm_instruction_gen_v04_public/U_0/U_0/U_2/next_state +add wave -noupdate -divider FOR_LOOP_J +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/clk_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten1_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten2_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten3_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten4_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten5_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten7_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/rst_n_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/set_init_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/start_valj_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/stop_valj_i +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnt_end_o +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnt_rdy_o +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnt_val_o +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnt_end_reg +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnt_reg +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/cnten_reg +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/set_init_reg +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/current_state +add wave -noupdate -group FOR_LOOP_J /tb_avm_instruction_gen_v04_public/U_0/U_0/U_1/next_state +add wave -noupdate -divider CAL_Y +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/clk_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/cnti_end_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/cntj_end_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_rdlat_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_rdy7_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_start_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_thres_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_wrlat_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/dbias_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ds_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/dw_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/rst_n_i +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/cnteni_o +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/cntenj_o +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_rdy_o +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/dout_o +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/we_y_o +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_rdlat_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_start_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/ctrl_wrlat_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/dbias_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/dw_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/y_inj_reg +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/current_state +add wave -noupdate -group CAL_Y /tb_avm_instruction_gen_v04_public/U_0/U_0/U_0/next_state +add wave -noupdate -divider CAL_W +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/clk_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/cnti_end_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/cntj_end_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_rdlat_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_rdy7_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_start_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_wrlat_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dbias_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ds_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dt_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dw_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dy_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/rst_n_i +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/cnteni_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/cntenj_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_rdy_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_wchgd_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dout_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/we_bias_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/we_w_o +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_rdlat_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_start_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_wchgd_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/ctrl_wrlat_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dbias_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dt_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/dw_reg +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/current_state +add wave -noupdate -group CAL_W /tb_avm_instruction_gen_v04_public/U_0/U_0/U_8/next_state +add wave -noupdate -divider INIT +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/clk_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/cnti_end_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/cntj_end_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_bias_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_rdlat_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_rdy7_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_start_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_wrlat_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/rst_n_i +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/cnteni_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/cntenj_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_rdy_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/dout_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/we_bias_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/we_s_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/we_t_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/we_w_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/we_y_o +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_rdlat_reg +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_start_reg +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/ctrl_wrlat_reg +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/current_state +add wave -noupdate -group INIT /tb_avm_instruction_gen_v04_public/U_0/U_0/U_9/next_state +add wave -noupdate -divider TEST +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/clk_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/cnti_end_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/cntj_end_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_rdlat_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_rdy7_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_start_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_wrlat_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ds_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/dt_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/dw_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/offset_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/rst_n_i +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/cnteni_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/cntenj_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_int_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_rdy_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/dout_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/we_s_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/we_t_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/we_w_o +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_int_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_rdlat_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_start_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/ctrl_wrlat_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/dt_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/dw_reg +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/current_state +add wave -noupdate -group TEST /tb_avm_instruction_gen_v04_public/U_0/U_0/U_10/next_state +add wave -noupdate -divider READ_WRITE +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/clk_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/cnti_end_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/cntj_end_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_din_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_rd_vec_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_rdlat_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_rdy7_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_start_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_wr_vec_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_wrlat_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/dbias_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ds_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/dt_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/dw_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/dy_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/rst_n_i +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/cnteni_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/cntenj_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_complete_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_dout_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_dout_valid_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_rdy_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/dout_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/we_bias_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/we_s_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/we_t_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/we_w_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/we_y_o +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_complete_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_dout_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_dout_valid_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_rdlat_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_start_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/ctrl_wrlat_reg +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/current_state +add wave -noupdate -group READ_WRITE /tb_avm_instruction_gen_v04_public/U_0/U_0/U_11/next_state +add wave -noupdate -divider TRAINING +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/clk_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/cnti_rdy_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/cntj_rdy_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_clear_epoch_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_maxepoch_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy1_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy2_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy7_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_start_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_wchgd_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/rst_n_i +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_epoch_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_int_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_not_rdy_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_start1_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_start2_o +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/cnti_rdy_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/cntj_rdy_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_clear_epoch_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_epoch_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_int_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_not_rdy_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy1_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_rdy2_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/ctrl_start_reg +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/current_state +add wave -noupdate -group TRAINING /tb_avm_instruction_gen_v04_public/U_0/U_0/U_12/next_state +add wave -noupdate -divider LATENCY +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/clk_i +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/dw_i +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/rst_n_i +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/cnt_alllat_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/cnteni_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/cntenj_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_memerr_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_rdlat_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_rdy_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_run_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_wrlat_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/dout_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/we_w_o +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/cnt_alllat_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_memerr_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_rdlat_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_rdy_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_run_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/ctrl_wrlat_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/dw_reg +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/current_state +add wave -noupdate -group LATENCY /tb_avm_instruction_gen_v04_public/U_0/U_0/U_13/next_state +add wave -noupdate -divider S-MEMORY +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/clk_i +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/we_i +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/d_i +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/addr_i +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/d_o +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/addr_reg +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/din_reg +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/we_reg +add wave -noupdate -group S-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_0/s_ram +add wave -noupdate -divider T-MEMORY +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/clk_i +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/we_i +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/d_i +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/addr_i +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/d_o +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/addr_reg +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/din_reg +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/we_reg +add wave -noupdate -group T-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_1/t_ram +add wave -noupdate -divider Y-MEMORY +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/clk_i +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/we_i +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/d_i +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/addr_i +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/d_o +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/addr_reg +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/din_reg +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/we_reg +add wave -noupdate -group Y-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_2/t_ram +add wave -noupdate -divider BIAS-MEMORY +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/clk_i +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/we_i +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/d_i +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/addr_i +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/d_o +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/addr_reg +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/din_reg +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/we_reg +add wave -noupdate -group BIAS-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_3/t_ram +add wave -noupdate -divider W-MEMORY +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/clk_i +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/we_i +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/d_i +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/addr_i +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/d_o +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/addr_reg +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/din_reg +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/we_reg +add wave -noupdate -group W-MEMORY /tb_avm_instruction_gen_v04_public/U_0/U_1/U_4/w_ram +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {0 ns} 0} +quietly wave cursor active 0 +configure wave -namecolwidth 450 +configure wave -valuecolwidth 120 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ps +update +WaveRestoreZoom {0 ns} {753333 ns} Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/answer.txt =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/answer.txt (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/answer.txt (revision 8) @@ -0,0 +1,64 @@ +0,00000004,1,00000000,1,0000001C,-1 +1,0000000E,1,0000000E,-1,0000000E,-1 +2,00000006,-1,0000000E,1,0000000E,-1 +3,00000004,1,00000000,1,00000000,1 +4,0000000E,1,0000000E,-1,0000002A,-1 +5,00000018,1,0000001C,-1,0000001C,-1 +6,00000004,1,00000000,1,0000001C,-1 +7,0000000E,1,0000000E,-1,0000000E,-1 +8,00000006,-1,0000000E,1,0000000E,-1 +9,00000004,1,00000000,1,00000000,1 +10,00000010,-1,0000001C,1,00000000,1 +11,00000006,-1,0000000E,1,0000000E,1 +12,00000004,1,00000000,1,0000001C,-1 +13,0000000E,1,0000000E,-1,0000000E,-1 +14,00000006,-1,0000000E,1,0000000E,-1 +15,00000004,1,00000000,1,00000000,1 +16,0000000E,1,0000000E,-1,0000000E,-1 +17,00000018,1,0000001C,-1,00000000,1 +18,00000004,1,00000000,1,00000000,1 +19,0000000E,1,0000000E,-1,0000000E,1 +20,00000018,1,0000001C,-1,0000001C,-1 +21,00000022,1,0000002A,-1,0000000E,-1 +22,0000000E,1,0000000E,-1,0000000E,-1 +23,00000018,1,0000001C,-1,00000000,1 +24,00000004,1,00000000,1,00000000,1 +25,0000000E,1,0000000E,-1,0000000E,1 +26,00000006,-1,0000000E,1,0000000E,1 +27,00000004,1,00000000,1,0000001C,1 +28,0000000E,1,0000000E,-1,0000000E,-1 +29,00000018,1,0000001C,-1,00000000,1 +30,00000004,1,00000000,1,00000000,1 +31,0000000E,1,0000000E,-1,0000000E,1 +32,0000000E,-1,0000000E,1,0000000E,-1 +33,00000004,-1,00000000,1,00000000,1 +34,00000018,-1,0000001C,1,00000000,1 +35,0000000E,-1,0000000E,1,0000000E,1 +36,00000004,-1,00000000,1,0000001C,-1 +37,00000006,1,0000000E,-1,0000000E,-1 +38,0000000E,-1,0000000E,1,0000000E,-1 +39,00000004,-1,00000000,1,00000000,1 +40,00000018,-1,0000001C,1,00000000,1 +41,0000000E,-1,0000000E,1,0000000E,1 +42,00000022,-1,0000002A,1,0000000E,1 +43,00000018,-1,0000001C,1,0000001C,1 +44,0000000E,-1,0000000E,1,0000000E,-1 +45,00000004,-1,00000000,1,00000000,1 +46,00000018,-1,0000001C,1,00000000,1 +47,0000000E,-1,0000000E,1,0000000E,1 +48,00000004,-1,00000000,1,00000000,1 +49,00000006,1,0000000E,-1,0000000E,1 +50,0000000E,-1,0000000E,1,0000000E,1 +51,00000004,-1,00000000,1,0000001C,1 +52,00000006,1,0000000E,-1,0000000E,-1 +53,00000010,1,0000001C,-1,00000000,1 +54,00000004,-1,00000000,1,00000000,1 +55,00000006,1,0000000E,-1,0000000E,1 +56,0000000E,-1,0000000E,1,0000000E,1 +57,00000004,-1,00000000,1,0000001C,1 +58,00000018,-1,0000001C,1,0000001C,1 +59,0000000E,-1,0000000E,1,0000002A,1 +60,00000004,-1,00000000,1,00000000,1 +61,00000006,1,0000000E,-1,0000000E,1 +62,0000000E,-1,0000000E,1,0000000E,1 +63,00000004,-1,00000000,1,0000001C,1 Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/bias_memory_up_down.txt =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/bias_memory_up_down.txt (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/bias_memory_up_down.txt (revision 8) @@ -0,0 +1,4 @@ +-- BIAS-Memory content for UP/DOWN/STOP pattern +00000000000000000000000000000110 +00000000000000000000000000001000 +00000000000000000000000000001000 Index: neural_net_perceptron/trunk/neural_net_perceptron/sim/modelsim.ini =================================================================== --- neural_net_perceptron/trunk/neural_net_perceptron/sim/modelsim.ini (nonexistent) +++ neural_net_perceptron/trunk/neural_net_perceptron/sim/modelsim.ini (revision 8) @@ -0,0 +1,2191 @@ +[Version] +INIVersion = "2021.1" + +; Copyright 1991-2021 Mentor Graphics Corporation +; +; All Rights Reserved. +; +; THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF +; MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS. +; + +[Library] +others = $MODEL_TECH/../modelsim.ini +; +; VITAL concerns: +; +; The library ieee contains (among other packages) the packages of the +; VITAL 2000 standard. When a design uses VITAL 2000 exclusively, it should use +; the physical library ieee (recommended), or use the physical library +; vital2000, but not both. The design can use logical library ieee and/or +; vital2000 as long as each of these maps to the same physical library, either +; ieee or vital2000. +; +; A design using the 1995 version of the VITAL packages, whether or not +; it also uses the 2000 version of the VITAL packages, must have logical library +; name ieee mapped to physical library vital1995. (A design cannot use library +; vital1995 directly because some packages in this library use logical name ieee +; when referring to the other packages in the library.) The design source +; should use logical name ieee when referring to any packages there except the +; VITAL 2000 packages. Any VITAL 2000 present in the design must use logical +; name vital2000 (mapped to physical library vital2000) to refer to those +; packages. +; ieee = $MODEL_TECH/../vital1995 +; +; For compatiblity with previous releases, logical library name vital2000 maps +; to library vital2000 (a different library than library ieee, containing the +; same packages). +; A design should not reference VITAL from both the ieee library and the +; vital2000 library because the vital packages are effectively different. +; A design that references both the ieee and vital2000 libraries must have +; both logical names ieee and vital2000 mapped to the same library, either of +; these: +; $MODEL_TECH/../ieee +; $MODEL_TECH/../vital2000 +; + +; added mapping for ADMS + +;vhdl_psl_checkers = $MODEL_TECH/../vhdl_psl_checkers // Source files only for this release +;verilog_psl_checkers = $MODEL_TECH/../verilog_psl_checkers // Source files only for this release +;mvc_lib = $MODEL_TECH/../mvc_lib + +; Automatically perform logical->physical mapping for physical libraries that +; appear in -L/-Lf options with filesystem path delimiters (e.g. '.' or '/'). +; The tail of the filesystem path name is chosen as the logical library name. +; For example, in the command "vopt -L ./path/to/lib1 -o opttop top", +; vopt automatically performs the mapping "lib1 -> ./path/to/lib1". +; See the User Manual for more details. +; +; AutoLibMapping = 0 + +work = ./work +[DefineOptionset] +; Define optionset entries for the various compilers, vmake, and vsim. +; These option sets can be used with the "-optionset " syntax. +; i.e. +; vlog -optionset COMPILEDEBUG top.sv +; vsim -optionset UVMDEBUG my_top +; +; Following are some useful examples. + +; define a vsim optionset for uvm debugging +UVMDEBUG = -uvmcontrol=all -msgmode both -displaymsgmode both -classdebug -onfinish stop + +; define a vopt optionset for debugging +VOPTDEBUG = +acc -debugdb + +[encryption] +; For vencrypt and vhencrypt. + +; Controls whether to encrypt whole files by ignoring all protect directives +; (except "viewport" and "interface_viewport") that are present in the input. +; The default is 0, use embedded protect directives to control the encryption. +; Set this to 1 to encrypt whole files by ignoring embedded protect directives. +; wholefile = 0 + +; Sets the data_method to use for the symmetric session key. +; The session key is a symmetric key that is randomly generated for each +; protected region (envelope) and is the heart of all encryption. This is used +; to set the length of the session key to generate and use when encrypting the +; HDL text. Supported values are aes128, aes192, and aes256. +; data_method = aes128 + +; The following 2 are for specifying an IEEE Std. 1735 Version 2 (V2) encryption +; "recipe" comprising an optional common block, at least one tool block (which +; contains the key public key), and the text to be encrypted. The common block +; and any of the tool blocks may contain rights in the form of the "control" +; directive. The text to be encrypted is specified either by setting +; "wholefile" to 1 or by embedding protect "begin" and "end" directives in +; the input HDL files. + +; Common recipe specification file. This file is optional. Its presence will +; require at least one "toolblock" to be specified. +; Directives such as "author" "author_info" and "data_method", +; as well as the common block license specification, go in this file. +; common = + +; Tool block specification recipe(s). Public key file with optional tool block +; file name. May be multiply-defined; at least one tool block is required if +; a recipe is being specified. +; Key file is a file name with no extension (.deprecated or .active will be +; supplied by the encryption tool). +; Rights file name is optional. +; toolblock = [,]{:[,]} + +; Location of directory containing recipe files. +; The default location is in the product installation directory. +; keyring = $MODEL_TECH/../keyring + +; Enable encryption statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list] +; Add '-' to disable specific statistics. Default is [cmd,msg]. +Stats = cmd,msg + +[vcom] +; VHDL93 variable selects language version as the default. +; Default is VHDL-2002. +; Value of 0 or 1987 for VHDL-1987. +; Value of 1 or 1993 for VHDL-1993. +; Default or value of 2 or 2002 for VHDL-2002. +; Value of 3 or 2008 for VHDL-2008 +; Value of 4 or ams99 for VHDL-AMS-1999 +; Value of 5 or ams07 for VHDL-AMS-2007 +VHDL93 = 2002 + +; Ignore VHDL-2008 declaration of REAL_VECTOR in package STANDARD. Default is off. +; ignoreStandardRealVector = 1 + +; Show source line containing error. Default is off. +; Show_source = 1 + +; Turn off unbound-component warnings. Default is on. +; Show_Warning1 = 0 + +; Turn off process-without-a-wait-statement warnings. Default is on. +; Show_Warning2 = 0 + +; Turn off null-range warnings. Default is on. +; Show_Warning3 = 0 + +; Turn off no-space-in-time-literal warnings. Default is on. +; Show_Warning4 = 0 + +; Turn off multiple-drivers-on-unresolved-signal warnings. Default is on. +; Show_Warning5 = 0 + +; Turn off optimization for IEEE std_logic_1164 package. Default is on. +; Optimize_1164 = 0 + +; Enable compiler statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list] +; Add '-' to disable specific statistics. Default is [time,cmd,msg]. +; Stats = time,cmd,msg + +; Turn on resolving of ambiguous function overloading in favor of the +; "explicit" function declaration (not the one automatically created by +; the compiler for each type declaration). Default is off. +; The .ini file has Explicit enabled so that std_logic_signed/unsigned +; will match the behavior of synthesis tools. +Explicit = 1 + +; Turn off acceleration of the VITAL packages. Default is to accelerate. +; NoVital = 1 + +; Turn off VITAL compliance checking. Default is checking on. +; NoVitalCheck = 1 + +; Ignore VITAL compliance checking errors. Default is to not ignore. +; IgnoreVitalErrors = 1 + +; Turn off VITAL compliance checking warnings. Default is to show warnings. +; Show_VitalChecksWarnings = 0 + +; Turn off PSL assertion warning messages. Default is to show warnings. +; Show_PslChecksWarnings = 0 + +; Enable parsing of embedded PSL assertions. Default is enabled. +; EmbeddedPsl = 0 + +; Keep silent about case statement static warnings. +; Default is to give a warning. +; NoCaseStaticError = 1 + +; Keep silent about warnings caused by aggregates that are not locally static. +; Default is to give a warning. +; NoOthersStaticError = 1 + +; Treat as errors: +; case statement static warnings +; warnings caused by aggregates that are not locally static +; Overrides NoCaseStaticError, NoOthersStaticError settings. +; PedanticErrors = 1 + +; Turn off inclusion of debugging info within design units. +; Default is to include debugging info. +; NoDebug = 1 + +; Turn off "Loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on some limited synthesis rule compliance checking. Checks only: +; -- signals used (read) by a process must be in the sensitivity list +; CheckSynthesis = 1 + +; Activate optimizations on expressions that do not involve signals, +; waits, or function/procedure/task invocations. Default is off. +; ScalarOpts = 1 + +; Turns on lint-style checking. +; Show_Lint = 1 + +; Require the user to specify a configuration for all bindings, +; and do not generate a compile time default binding for the +; component. This will result in an elaboration error of +; 'component not bound' if the user fails to do so. Avoids the rare +; issue of a false dependency upon the unused default binding. +; RequireConfigForAllDefaultBinding = 1 + +; Perform default binding at compile time. +; Default is to do default binding at load time. +; BindAtCompile = 1; + +; Inhibit range checking on subscripts of arrays. Range checking on +; scalars defined with subtypes is inhibited by default. +; NoIndexCheck = 1 + +; Inhibit range checks on all (implicit and explicit) assignments to +; scalar objects defined with subtypes. +; NoRangeCheck = 1 + +; Set the prefix to be honored for synthesis/coverage pragma recognition. +; Default is "". +; AddPragmaPrefix = "" + +; Ignore synthesis and coverage pragmas with this prefix. +; Default is "". +; IgnorePragmaPrefix = "" + +; Turn on code coverage in VHDL design units. Default is off. +; Coverage = sbceft + +; Turn off code coverage in VHDL subprograms. Default is on. +; CoverSub = 0 + +; Automatically exclude VHDL case statement OTHERS choice branches. +; This includes OTHERS choices in selected signal assigment statements. +; Default is to not exclude. +; CoverExcludeDefault = 1 + +; Control compiler and VOPT optimizations that are allowed when +; code coverage is on. Refer to the comment for this in the [vlog] area. +; CoverOpt = 3 + +; Turn on or off clkOpt optimization for code coverage. Default is on. +; CoverClkOpt = 1 + +; Turn on or off clkOpt optimization builtins for code coverage. Default is on. +; CoverClkOptBuiltins = 0 + +; Inform code coverage optimizations to respect VHDL 'H' and 'L' +; values on signals in conditions and expressions, and to not automatically +; convert them to '1' and '0'. Default is to not convert. +; CoverRespectHandL = 0 + +; Increase or decrease the maximum number of rows allowed in a UDP table +; implementing a VHDL condition coverage or expression coverage expression. +; More rows leads to a longer compile time, but more expressions covered. +; CoverMaxUDPRows = 192 + +; Increase or decrease the maximum number of input patterns that are present +; in FEC table. This leads to a longer compile time with more expressions +; covered with FEC metric. +; CoverMaxFECRows = 192 + +; Increase or decrease the limit on the size of expressions and conditions +; considered for expression and condition coverages. Higher FecUdpEffort leads +; to higher compile, optimize and simulation time, but more expressions and +; conditions are considered for coverage in the design. FecUdpEffort can +; be set to a number ranging from 1 (low) to 3 (high), defined as: +; 1 - (low) Only small expressions and conditions considered for coverage. +; 2 - (medium) Bigger expressions and conditions considered for coverage. +; 3 - (high) Very large expressions and conditions considered for coverage. +; The default setting is 1 (low). +; FecUdpEffort = 1 + +; Enable or disable Focused Expression Coverage analysis for conditions and +; expressions. Focused Expression Coverage data is provided by default when +; expression and/or condition coverage is active. +; CoverFEC = 0 + +; Enable or disable UDP Coverage analysis for conditions and expressions. +; UDP Coverage data is disabled by default when expression and/or condition +; coverage is active. +; CoverUDP = 1 + +; Enable or disable Rapid Expression Coverage mode for conditions and expressions. +; Disabling this would convert non-masking conditions in FEC tables to matching +; input patterns. +; CoverREC = 1 + +; Enable or disable bit-blasting multi-bit operands of reduction prefix expressions +; for expression/condition coverage. +; NOTE: Enabling this may have a negative impact on simulation performance. +; CoverExpandReductionPrefix = 0 + +; Enable or disable short circuit evaluation of conditions and expressions when +; condition or expression coverage is active. Short circuit evaluation is enabled +; by default. +; CoverShortCircuit = 0 + +; Enable code coverage reporting of code that has been optimized away. +; The default is not to report. +; CoverReportCancelled = 1 + +; Enable deglitching of code coverage in combinatorial, non-clocked, processes. +; Default is no deglitching. +; CoverDeglitchOn = 1 + +; Control the code coverage deglitching period. A period of 0, eliminates delta +; cycle glitches. The value of CoverDeglitchPeriod needs to be either be 0 or a +; time string that includes time units. Examples: 0 or 10.0ps or "10.0 ps". +; CoverDeglitchPeriod = 0 + +; Use this directory for compiler temporary files instead of "work/_temp" +; CompilerTempDir = /tmp + +; Set this to cause the compilers to force data to be committed to disk +; when the files are closed. +; SyncCompilerFiles = 1 + +; Add VHDL-AMS declarations to package STANDARD +; Default is not to add +; AmsStandard = 1 + +; Range and length checking will be performed on array indices and discrete +; ranges, and when violations are found within subprograms, errors will be +; reported. Default is to issue warnings for violations, because subprograms +; may not be invoked. +; NoDeferSubpgmCheck = 0 + +; Turn ON detection of FSMs having single bit current state variable. +; FsmSingle = 1 + +; Turn off reset state transitions in FSM. +; FsmResetTrans = 0 + +; Turn ON detection of FSM Implicit Transitions. +; FsmImplicitTrans = 1 + +; Controls whether or not to show immediate assertions with constant expressions +; in GUI/report/UCDB etc. By default, immediate assertions with constant +; expressions are shown in GUI/report/UCDB etc. This does not affect +; evaluation of immediate assertions. +; ShowConstantImmediateAsserts = 0 + +; Controls how VHDL basic identifiers are stored with the design unit. +; Does not make the language case-sensitive, affects only how declarations +; declared with basic identifiers have their names stored and printed +; (in the GUI, examine, etc.). +; Default is to preserve the case as originally depicted in the VHDL source. +; Value of 0 indicates to change all basic identifiers to lower case. +; PreserveCase = 0 + +; For Configuration Declarations, controls the effect that USE clauses have +; on visibility inside the configuration items being configured. If 1 +; (the default), then use pre-10.0 behavior. If 0, then for stricter LRM-compliance, +; extend the visibility of objects made visible through USE clauses into nested +; component configurations. +; OldVHDLConfigurationVisibility = 0 + +; Allows VHDL configuration declarations to be in a different library from +; the corresponding configured entity. Default is to not allow this for +; stricter LRM-compliance. +; SeparateConfigLibrary = 1; + +; Determine how mode OUT subprogram parameters of type array and record are treated. +; If 0 (the default), then only VHDL 2008 will do this initialization. +; If 1, always initialize the mode OUT parameter to its default value. +; If 2, do not initialize the mode OUT out parameter. +; Note that prior to release 10.1, all language versions did not initialize mode +; OUT array and record type parameters, unless overridden here via this mechanism. +; In release 10.1 and later, only files compiled with VHDL 2008 will cause this +; initialization, unless overridden here. +; InitOutCompositeParam = 0 + +; Generate symbols debugging database in only some special cases to save on +; the number of files in the library. For other design-units, this database is +; generated on-demand in vsim. +; Default is to to generate debugging database for all design-units. +; SmartDbgSym = 1 + +; Enable or disable automatic creation of missing libraries. +; Default is 1 (enabled) +; CreateLib = 1 + +; Describe compilation options according to matching file patterns. +; File pattern * matches all printing characters other than '/'. +; File pattern **/x matches all paths containing file/directory x. +; File pattern x/** matches all paths beginning at directory x. +; FileOptMap = (**/*.vhd => -2008); + +; Describe library targets of compilation according to matching file patterns. +; LibMap = (**/*.vhd => work); + +[vlog] +; Turn off inclusion of debugging info within design units. +; Default is to include debugging info. +; NoDebug = 1 + +; Turn off "Loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on Verilog hazard checking (order-dependent accessing of global vars). +; Default is off. +; Hazard = 1 + +; Turn on converting regular Verilog identifiers to uppercase. Allows case +; insensitivity for module names. Default is no conversion. +; UpCase = 1 + +; Activate optimizations on expressions that do not involve signals, +; waits, or function/procedure/task invocations. Default is off. +; ScalarOpts = 1 + +; Turns on lint-style checking. +; Show_Lint = 1 + +; Show source line containing error. Default is off. +; Show_source = 1 + +; Turn on bad option warning. Default is off. +; Show_BadOptionWarning = 1 + +; Revert back to IEEE 1364-1995 syntax, default is 0 (off). +; vlog95compat = 1 + +; Turn off PSL warning messages. Default is to show warnings. +; Show_PslChecksWarnings = 0 + +; Enable parsing of embedded PSL assertions. Default is enabled. +; EmbeddedPsl = 0 + +; Enable compiler statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list,kb] +; Add '-' to disable specific statistics. Default is [time,cmd,msg]. +; Stats = time,cmd,msg + +; Set the threshold for automatically identifying sparse Verilog memories. +; A memory with total size in bytes equal to or more than the sparse memory +; threshold gets marked as sparse automatically, unless specified otherwise +; in source code or by the +nosparse commandline option of vlog or vopt. +; The default is 1M. (i.e. memories with total size equal +; to or greater than 1Mb are marked as sparse) +; SparseMemThreshold = 1048576 + +; Set the prefix to be honored for synthesis and coverage pragma recognition. +; Default is "". +; AddPragmaPrefix = "" + +; Ignore synthesis and coverage pragmas with this prefix. +; Default is "". +; IgnorePragmaPrefix = "" + +; Set the option to treat all files specified in a vlog invocation as a +; single compilation unit. The default value is set to 0 which will treat +; each file as a separate compilation unit as specified in the P1800 draft standard. +; MultiFileCompilationUnit = 1 + +; Turn on code coverage in Verilog design units. Default is off. +; Coverage = sbceft + +; Automatically exclude Verilog case statement default branches. +; Default is to not automatically exclude defaults. +; CoverExcludeDefault = 1 + +; Increase or decrease the maximum number of rows allowed in a UDP table +; implementing a VHDL condition coverage or expression coverage expression. +; More rows leads to a longer compile time, but more expressions covered. +; CoverMaxUDPRows = 192 + +; Increase or decrease the maximum number of input patterns that are present +; in FEC table. This leads to a longer compile time with more expressions +; covered with FEC metric. +; CoverMaxFECRows = 192 + +; Enable Multi Bit Expression Coverage in a Design, If design has expression with +; multi bit operands, this option enables its Expression Coverage. +; The default value is 0. +; CoverFecMultiBit = 1 + +; Increase or decrease the limit on the size of expressions and conditions +; considered for expression and condition coverages. Higher FecUdpEffort leads +; to higher compile, optimize and simulation time, but more expressions and +; conditions are considered for coverage in the design. FecUdpEffort can +; be set to a number ranging from 1 (low) to 3 (high), defined as: +; 1 - (low) Only small expressions and conditions considered for coverage. +; 2 - (medium) Bigger expressions and conditions considered for coverage. +; 3 - (high) Very large expressions and conditions considered for coverage. +; The default setting is 1 (low). +; FecUdpEffort = 1 + +; Enable or disable Focused Expression Coverage analysis for conditions and +; expressions. Focused Expression Coverage data is provided by default when +; expression and/or condition coverage is active. +; CoverFEC = 0 + +; Enable or disable UDP Coverage analysis for conditions and expressions. +; UDP Coverage data is disabled by default when expression and/or condition +; coverage is active. +; CoverUDP = 1 + +; Enable or disable Rapid Expression Coverage mode for conditions and expressions. +; Disabling this would convert non-masking conditions in FEC tables to matching +; input patterns. +; CoverREC = 1 + +; Enable or disable bit-blasting multi-bit operands of reduction prefix expressions +; for expression/condition coverage. +; NOTE: Enabling this may have a negative impact on simulation performance. +; CoverExpandReductionPrefix = 0 + +; Enable or disable short circuit evaluation of conditions and expressions when +; condition or expression coverage is active. Short circuit evaluation is enabled +; by default. +; CoverShortCircuit = 0 + +; Enable deglitching of code coverage in combinatorial, non-clocked, processes. +; Default is no deglitching. +; CoverDeglitchOn = 1 + +; Control the code coverage deglitching period. A period of 0, eliminates delta +; cycle glitches. The value of CoverDeglitchPeriod needs to be either be 0 or a +; time string that includes time units. Examples: 0 or 10.0ps or "10.0 ps". +; CoverDeglitchPeriod = 0 + +; Turn on code coverage in VLOG `celldefine modules, modules containing +; specify blocks, and modules included using vlog -v and -y. Default is off. +; CoverCells = 1 + +; Enable code coverage reporting of code that has been optimized away. +; The default is not to report. +; CoverReportCancelled = 1 + +; Control compiler and VOPT optimizations that are allowed when +; code coverage is on. This is a number from 0 to 5, with the following +; meanings (the default is 3): +; 5 -- All allowable optimizations are on. +; 4 -- Turn off removing unreferenced code. +; 3 -- Turn off process, always block and if statement merging. +; 2 -- Turn off expression optimization, converting primitives +; to continuous assignments, VHDL subprogram inlining. +; and VHDL clkOpt (converting FF's to builtins). +; 1 -- Turn off continuous assignment optimizations and clock suppression. +; 0 -- Turn off Verilog module inlining and VHDL arch inlining. +; HOWEVER, if fsm coverage is turned on, optimizations will be forced to +; level 3, with also turning off converting primitives to continuous assigns. +; CoverOpt = 3 + +; Specify the override for the default value of "cross_num_print_missing" +; option for the Cross in Covergroups. If not specified then LRM default +; value of 0 (zero) is used. This is a compile time option. +; SVCrossNumPrintMissingDefault = 0 + +; Setting following to 1 would cause creation of variables which +; would represent the value of Coverpoint expressions. This is used +; in conjunction with "SVCoverpointExprVariablePrefix" option +; in the modelsim.ini +; EnableSVCoverpointExprVariable = 0 + +; Specify the override for the prefix used in forming the variable names +; which represent the Coverpoint expressions. This is used in conjunction with +; "EnableSVCoverpointExprVariable" option of the modelsim.ini +; The default prefix is "expr". +; The variable name is +; variable name => _ +; SVCoverpointExprVariablePrefix = expr + +; Override for the default value of the SystemVerilog covergroup, +; coverpoint, and cross option.goal (defined to be 100 in the LRM). +; NOTE: It does not override specific assignments in SystemVerilog +; source code. NOTE: The modelsim.ini variable "SVCovergroupGoal" +; in the [vsim] section can override this value. +; SVCovergroupGoalDefault = 100 + +; Override for the default value of the SystemVerilog covergroup, +; coverpoint, and cross type_option.goal (defined to be 100 in the LRM) +; NOTE: It does not override specific assignments in SystemVerilog +; source code. NOTE: The modelsim.ini variable "SVCovergroupTypeGoal" +; in the [vsim] section can override this value. +; SVCovergroupTypeGoalDefault = 100 + +; Specify the override for the default value of "strobe" option for the +; Covergroup Type. This is a compile time option which forces "strobe" to +; a user specified default value and supersedes SystemVerilog specified +; default value of '0'(zero). NOTE: This can be overriden by a runtime +; modelsim.ini variable "SVCovergroupStrobe" in the [vsim] section. +; SVCovergroupStrobeDefault = 0 + +; Specify the override for the default value of "per_instance" option for the +; Covergroup variables. This is a compile time option which forces "per_instance" +; to a user specified default value and supersedes SystemVerilog specified +; default value of '0'(zero). +; SVCovergroupPerInstanceDefault = 0 + +; Specify the override for the default value of "get_inst_coverage" option for the +; Covergroup variables. This is a compile time option which forces +; "get_inst_coverage" to a user specified default value and supersedes +; SystemVerilog specified default value of '0'(zero). +; SVCovergroupGetInstCoverageDefault = 0 + +; +; A space separated list of resource libraries that contain precompiled +; packages. The behavior is identical to using the "-L" switch. +; +; LibrarySearchPath = [ ...] +LibrarySearchPath = mtiAvm mtiRnm mtiOvm mtiUvm mtiUPF infact + +; The behavior is identical to the "-mixedansiports" switch. Default is off. +; MixedAnsiPorts = 1 + +; Enable SystemVerilog 3.1a $typeof() function. Default is off. +; EnableTypeOf = 1 + +; Only allow lower case pragmas. Default is disabled. +; AcceptLowerCasePragmaOnly = 1 + +; Set the maximum depth permitted for a recursive include file nesting. +; IncludeRecursionDepthMax = 5 + +; Turn ON detection of FSMs having single bit current state variable. +; FsmSingle = 1 + +; Turn off reset state transitions in FSM. +; FsmResetTrans = 0 + +; Turn off detections of FSMs having x-assignment. +; FsmXAssign = 0 + +; Turn ON detection of FSM Implicit Transitions. +; FsmImplicitTrans = 1 + +; List of file suffixes which will be read as SystemVerilog. White space +; in extensions can be specified with a back-slash: "\ ". Back-slashes +; can be specified with two consecutive back-slashes: "\\"; +; SvFileSuffixes = sv svp svh + +; This setting is the same as the vlog -sv command line switch. +; Enables SystemVerilog features and keywords when true (1). +; When false (0), the rules of IEEE Std 1364-2005 are followed and +; SystemVerilog keywords are ignored. +; Svlog = 0 + +; Prints attribute placed upon SV packages during package import +; when true (1). The attribute will be ignored when this +; entry is false (0). The attribute name is "mti_design_element_load_message". +; The value of this attribute is a string literal. +; Default is true (1). +; PrintSVPackageLoadingAttribute = 1 + +; Do not show immediate assertions with constant expressions in +; GUI/reports/UCDB etc. By default immediate assertions with constant +; expressions are shown in GUI/reports/UCDB etc. This does not affect +; evaluation of immediate assertions. +; ShowConstantImmediateAsserts = 0 + +; Controls if untyped parameters that are initialized with values greater +; than 2147483647 are mapped to generics of type INTEGER or ignored. +; If mapped to VHDL Integers, values greater than 2147483647 +; are mapped to negative values. +; Default is to map these parameter to generic of type INTEGER +; ForceUnsignedToVHDLInteger = 1 + +; Enable AMS wreal (wired real) extensions. Default is 0. +; WrealType = 1 + +; Controls SystemVerilog Language Extensions. These options enable +; some non-LRM compliant behavior. +; SvExtensions = [+|-][,[+|-]*] + +; Generate symbols debugging database in only some special cases to save on +; the number of files in the library. For other design-units, this database is +; generated on-demand in vsim. +; Default is to to generate debugging database for all design-units. +; SmartDbgSym = 1 + +; Controls how $unit library entries are named. Valid options are: +; "file" (generate name based on the first file on the command line) +; "du" (generate name based on first design unit following an item +; found in $unit scope) +; CUAutoName = file + +; Enable or disable automatic creation of missing libraries. +; Default is 1 (enabled) +; CreateLib = 1 + +[sccom] +; Enable use of SCV include files and library. Default is off. +; UseScv = 1 + +; Add C++ compiler options to the sccom command line by using this variable. +; CppOptions = -g + +; Use custom C++ compiler located at this path rather than the default path. +; The path should point directly at a compiler executable. +; CppPath = /usr/bin/g++ + +; Specify the compiler version from the list of support GNU compilers. +; examples 4.7.4, 5.3.0, 7.4.0 +; CppInstall = 7.4.0 + +; Enable verbose messages from sccom. Default is off. +; SccomVerbose = 1 + +; sccom logfile. Default is no logfile. +; SccomLogfile = sccom.log + +; Enable use of SC_MS include files and library. Default is off. +; UseScMs = 1 + +; Use SystemC-2.2 instead of the default SystemC-2.3. Default is off. +; Sc22Mode = 1 + +; Enable compiler statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list,kb] +; Add '-' to disable specific statistics. Default is [time,cmd,msg]. +; Stats = time,cmd,msg + +; Enable or disable automatic creation of missing libraries. +; Default is 1 (enabled) +; CreateLib = 1 + +; Enable use of UVMC library. Default is off. +; UseUvmc = 1 + +[vopt] +; Turn on code coverage in vopt. Default is off. +; Coverage = sbceft + +; enable or disable param saving in UCDB. +; CoverageSaveParam = 0 + +; Control compiler optimizations that are allowed when +; code coverage is on. Refer to the comment for this in the [vlog] area. +; CoverOpt = 3 + +; Controls set of CoverConstructs that are being considered for Coverage +; Collection. +; Some of Valid options are: default,set1,set2 +; Covermode = default + +; Override all PA VOPT and VSIM commands to run simulation in Non-PA mode. +; NonPAmode = 1 + +; Controls set of HDL cover constructs that would be considered(or not considered) +; for Coverage Collection. (Default corresponds to covermode default). +; Some of Valid options are: "ca", "citf", "cifl", "tcint", "fsmqs". +; Coverconstruct = noca,nocitf,nofsmtf,nofsmds,noctes,nocicl,nocprc,nocfl,nofsmup,nocifl,nocpm,notcint,nocpkg,nocsva + +; Increase or decrease the maximum number of rows allowed in a UDP table +; implementing a VHDL condition coverage or expression coverage expression. +; More rows leads to a longer compile time, but more expressions covered. +; CoverMaxUDPRows = 192 + +; Increase or decrease the maximum number of input patterns that are present +; in FEC table. This leads to a longer compile time with more expressions +; covered with FEC metric. +; CoverMaxFECRows = 192 + +; Enable Multi Bit Expression Coverage in a Design, If design has expression with +; multi bit operands, this option enables its Expression Coverage. +; The default value is 0. +; CoverFecMultiBit = 1 + +; Increase or decrease the limit on the size of expressions and conditions +; considered for expression and condition coverages. Higher FecUdpEffort leads +; to higher compile, optimize and simulation time, but more expressions and +; conditions are considered for coverage in the design. FecUdpEffort can +; be set to a number ranging from 1 (low) to 3 (high), defined as: +; 1 - (low) Only small expressions and conditions considered for coverage. +; 2 - (medium) Bigger expressions and conditions considered for coverage. +; 3 - (high) Very large expressions and conditions considered for coverage. +; The default setting is 1 (low). +; FecUdpEffort = 1 + +; Enable code coverage reporting of code that has been optimized away. +; The default is not to report. +; CoverReportCancelled = 1 + +; Enable deglitching of code coverage in combinatorial, non-clocked, processes. +; Default is no deglitching. +; CoverDeglitchOn = 1 + +; Enable compiler statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list,kb] +; Add '-' to disable specific statistics. Default is [time,cmd,msg]. +; Stats = time,cmd,msg + +; Control the code coverage deglitching period. A period of 0, eliminates delta +; cycle glitches. The value of CoverDeglitchPeriod needs to be either be 0 or a +; time string that includes time units. Examples: 0 or 10.0ps or "10.0 ps". +; CoverDeglitchPeriod = 0 + +; Do not show immediate assertions with constant expressions in +; GUI/reports/UCDB etc. By default immediate assertions with constant +; expressions are shown in GUI/reports/UCDB etc. This does not affect +; evaluation of immediate assertions. +; ShowConstantImmediateAsserts = 0 + +; Set the maximum number of iterations permitted for a generate loop. +; Restricting this permits the implementation to recognize infinite +; generate loops. +; GenerateLoopIterationMax = 100000 + +; Set the maximum depth permitted for a recursive generate instantiation. +; Restricting this permits the implementation to recognize infinite +; recursions. +; GenerateRecursionDepthMax = 200 + +; Set the number of processes created during the code generation phase. +; By default a heuristic is used to set this value. This may be set to 0 +; to disable this feature completely. +; ParallelJobs = 0 + +; Controls SystemVerilog Language Extensions. These options enable +; some non-LRM compliant behavior. +; SvExtensions = [+|-][,[+|-]*] + +; Load the specified shared objects with the RTLD_GLOBAL flag. +; This gives global visibility to all symbols in the shared objects, +; meaning that subsequently loaded shared objects can bind to symbols +; in the global shared objects. The list of shared objects should +; be whitespace delimited. This option is not supported on the +; Windows or AIX platforms. +; GlobalSharedObjectList = example1.so example2.so example3.so + +; Disable SystemVerilog elaboration system task messages +; IgnoreSVAInfo = 1 +; IgnoreSVAWarning = 1 +; IgnoreSVAError = 1 +; IgnoreSVAFatal = 1 + +; Enable or disable automatic creation of missing libraries. +; Default is 1 (enabled) +; CreateLib = 1 + +[vsim] +; vopt flow +; Set to turn on automatic optimization of a design. +; Default is on +VoptFlow = 1 + +; Simulator resolution +; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100. +Resolution = ns + +; Disable certain code coverage exclusions automatically. +; Assertions and FSM are exluded from the code coverage by default +; Set AutoExclusionsDisable = fsm to enable code coverage for fsm +; Set AutoExclusionsDisable = assertions to enable code coverage for assertions +; Set AutoExclusionsDisable = all to enable code coverage for all the automatic exclusions +; Or specify comma or space separated list +;AutoExclusionsDisable = fsm,assertions + +; User time unit for run commands +; Set to default, fs, ps, ns, us, ms, or sec. The default is to use the +; unit specified for Resolution. For example, if Resolution is 100ps, +; then UserTimeUnit defaults to ps. +; Should generally be set to default. +UserTimeUnit = default + +; Default run length +RunLength = 100 + +; Maximum iterations that can be run without advancing simulation time +IterationLimit = 10000000 + +; Specify libraries to be searched for precompiled modules +; LibrarySearchPath = [ ...] + +; Set XPROP assertion fail limit. Default is 5. +; Any positive integer, -1 for infinity. +; XpropAssertionLimit = 5 + +; Control PSL and Verilog Assume directives during simulation +; Set SimulateAssumeDirectives = 0 to disable assume being simulated as asserts +; Set SimulateAssumeDirectives = 1 to enable assume simulation as asserts +; SimulateAssumeDirectives = 1 + +; Control the simulation of PSL and SVA +; These switches can be overridden by the vsim command line switches: +; -psl, -nopsl, -sva, -nosva. +; Set SimulatePSL = 0 to disable PSL simulation +; Set SimulatePSL = 1 to enable PSL simulation (default) +; SimulatePSL = 1 +; Set SimulateSVA = 0 to disable SVA simulation +; Set SimulateSVA = 1 to enable concurrent SVA simulation (default) +; SimulateSVA = 1 + +; Control SVA and VHDL immediate assertion directives during simulation +; Set SimulateImmedAsserts = 0 to disable simulation of immediate asserts +; Set SimulateImmedAsserts = 1 to enable simulation of immediate asserts +; SimulateImmedAsserts = 1 + +; License feature mappings for Verilog and VHDL +; qhsimvh Single language VHDL license +; qhsimvl Single language Verilog license +; msimhdlsim Language neutral license for either Verilog or VHDL +; msimhdlmix Second language only, language neutral license for either +; Verilog or VHDL +; +; Directives to license manager can be set either as single value or as +; space separated multi-values: +; vhdl Immediately checkout and hold a VHDL license (i.e., one of +; qhsimvh, msimhdlsim, or msimhdlmix) +; vlog Immediately checkout and hold a Verilog license (i.e., one of +; qhsimvl, msimhdlsim, or msimhdlmix) +; plus Immediately checkout and hold a VHDL license and a Verilog license +; noqueue Do not wait in the license queue when a license is not available +; viewsim Try for viewer license but accept simulator license(s) instead +; of queuing for viewer license (PE ONLY) +; noviewer Disable checkout of msimviewer license feature (PE ONLY) +; noslvhdl Disable checkout of qhsimvh license feature +; noslvlog Disable checkout of qhsimvl license feature +; nomix Disable checkout of msimhdlmix license feature +; nolnl Disable checkout of msimhdlsim license feature +; mixedonly Disable checkout of qhsimvh and qhsimvl license features +; lnlonly Disable checkout of qhsimvh,qhsimvl, and msimhdlmix license features +; +; Examples (remove ";" comment character to activate licensing directives): +; Single directive: +; License = plus +; Multi-directive (Note: space delimited directives): +; License = noqueue plus + +; Severity level of a VHDL assertion message or of a SystemVerilog severity system task +; which will cause a running simulation to stop. +; VHDL assertions and SystemVerilog severity system task that occur with the +; given severity or higher will cause a running simulation to stop. +; This value is ignored during elaboration. +; 0 = Note 1 = Warning 2 = Error 3 = Failure 4 = Fatal +BreakOnAssertion = 3 + +; Severity level of a tool message which will cause a running simulation to +; stop. This value is ignored during elaboration. Default is to not break. +; 0 = Note 1 = Warning 2 = Error 3 = Fatal +;BreakOnMessage = 2 + +; The class debug feature enables more visibility and tracking of class instances +; during simulation. By default this feature is disabled (0). To enable this +; feature set ClassDebug to 1. +; ClassDebug = 1 + +; Message Format conversion specifications: +; %S - Severity Level of message/assertion +; %R - Text of message +; %T - Time of message +; %D - Delta value (iteration number) of Time +; %K - Kind of path: Instance/Region/Signal/Process/Foreign Process/Unknown/Protected +; %i - Instance/Region/Signal pathname with Process name (if available) +; %I - shorthand for one of these: +; " %K: %i" +; " %K: %i File: %F" (when path is not Process or Signal) +; except that the %i in this case does not report the Process name +; %O - Process name +; %P - Instance/Region path without leaf process +; %F - File name +; %L - Line number; if assertion message, then line number of assertion or, if +; assertion is in a subprogram, line from which the call is made +; %u - Design unit name in form library.primary +; %U - Design unit name in form library.primary(secondary) +; %% - The '%' character itself +; +; If specific format for Severity Level is defined, use that format. +; Else, for a message that occurs during elaboration: +; -- Failure/Fatal message in VHDL region that is not a Process, and in +; certain non-VHDL regions, uses MessageFormatBreakLine; +; -- Failure/Fatal message otherwise uses MessageFormatBreak; +; -- Note/Warning/Error message uses MessageFormat. +; Else, for a message that occurs during runtime and triggers a breakpoint because +; of the BreakOnAssertion setting: +; -- if in a VHDL region that is not a Process, uses MessageFormatBreakLine; +; -- otherwise uses MessageFormatBreak. +; Else (a runtime message that does not trigger a breakpoint) uses MessageFormat. +; +; MessageFormatNote = "** %S: %R\n Time: %T Iteration: %D%I\n" +; MessageFormatWarning = "** %S: %R\n Time: %T Iteration: %D%I\n" +; MessageFormatError = "** %S: %R\n Time: %T Iteration: %D %K: %i File: %F\n" +; MessageFormatFail = "** %S: %R\n Time: %T Iteration: %D %K: %i File: %F\n" +; MessageFormatFatal = "** %S: %R\n Time: %T Iteration: %D %K: %i File: %F\n" +; MessageFormatBreakLine = "** %S: %R\n Time: %T Iteration: %D %K: %i File: %F Line: %L\n" +; MessageFormatBreak = "** %S: %R\n Time: %T Iteration: %D %K: %i File: %F\n" +; MessageFormat = "** %S: %R\n Time: %T Iteration: %D%I\n" + +; Error File - alternate file for storing error messages +; ErrorFile = error.log + +; Simulation Breakpoint messages +; This flag controls the display of function names when reporting the location +; where the simulator stops because of a breakpoint or fatal error. +; Example with function name: # Break in Process ctr at counter.vhd line 44 +; Example without function name: # Break at counter.vhd line 44 +; Default value is 1. +ShowFunctions = 1 + +; Default radix for all windows and commands. +; Radix may be one of: symbolic, ascii, binary, octal, decimal, hex, unsigned +; Flags may be one of: enumnumeric, showbase, wreal +DefaultRadix = hexadecimal +DefaultRadixFlags = showbase +; Set to 1 for make the signal_force VHDL and Verilog functions use the +; default radix when processing the force value. Prior to 10.2 signal_force +; used the default radix, now it always uses symbolic unless value explicitly indicates base +;SignalForceFunctionUseDefaultRadix = 0 + +; VSIM Startup command +; Startup = do startup.do + +; VSIM Shutdown file +; Filename to save u/i formats and configurations. +; ShutdownFile = restart.do +; To explicitly disable auto save: +; ShutdownFile = --disable-auto-save + +; Run simulator in batch mode as if -batch were specified on the command line if none of -c, -gui, or -i specified. +; Simulator runs in interactive mode as if -i were specified if this option is 0. Default is 0. +; BatchMode = 1 + +; File for saving command transcript when -batch option used +; This option is ignored when -c, -gui, or -i options are used or if BatchMode above is zero +; default is unset so command transcript only goes to stdout for better performance +; BatchTranscriptFile = transcript + +; File for saving command transcript, this option is ignored when -batch option is used +TranscriptFile = transcript + +; Transcript file long line wrapping mode(s) +; mode == 0 :: no wrapping, line recorded as is +; mode == 1 :: wrap at first whitespace after WSColumn +; or at Column. +; mode == 2 :: wrap as above, but add continuation +; character ('\') at end of each wrapped line +; +; WrapMode = 0 +; WrapColumn = 30000 +; WrapWSColumn = 27000 + +; File for saving command history +; CommandHistory = cmdhist.log + +; Specify whether paths in simulator commands should be described +; in VHDL or Verilog format. +; For VHDL, PathSeparator = / +; For Verilog, PathSeparator = . +; Must not be the same character as DatasetSeparator. +PathSeparator = / + +; Specify the dataset separator for fully rooted contexts. +; The default is ':'. For example: sim:/top +; Must not be the same character as PathSeparator. +DatasetSeparator = : + +; Specify a unique path separator for the Signal Spy set of functions. +; The default will be to use the PathSeparator variable. +; Must not be the same character as DatasetSeparator. +; SignalSpyPathSeparator = / + +; Used to control parsing of HDL identifiers input to the tool. +; This includes CLI commands, vsim/vopt/vlog/vcom options, +; string arguments to FLI/VPI/DPI calls, etc. +; If set to 1, accept either Verilog escaped Id syntax or +; VHDL extended id syntax, regardless of source language. +; If set to 0, the syntax of the source language must be used. +; Each identifier in a hierarchical name may need different syntax, +; e.g. "/top/\vhdl*ext*id\/middle/\vlog*ext*id /bottom" or +; "top.\vhdl*ext*id\.middle.\vlog*ext*id .bottom" +; GenerousIdentifierParsing = 1 + +; Disable VHDL assertion messages +; IgnoreNote = 1 +; IgnoreWarning = 1 +; IgnoreError = 1 +; IgnoreFailure = 1 + +; Disable SystemVerilog assertion messages +; IgnoreSVAInfo = 1 +; IgnoreSVAWarning = 1 +; IgnoreSVAError = 1 +; IgnoreSVAFatal = 1 + +; Do not print any additional information from Severity System tasks. +; Only the message provided by the user is printed along with severity +; information. +; SVAPrintOnlyUserMessage = 1; + +; Default force kind. May be freeze, drive, deposit, or default +; or in other terms, fixed, wired, or charged. +; A value of "default" will use the signal kind to determine the +; force kind, drive for resolved signals, freeze for unresolved signals +; DefaultForceKind = freeze + +; Control the iteration of events when a VHDL signal is forced to a value +; This flag can be set to honour the signal update event in next iteration, +; the default is to update and propagate in the same iteration. +; ForceSigNextIter = 1 + +; Enable simulation statistics. Specify one or more arguments: +; [all,none,time,cmd,msg,perf,verbose,list,kb,eor] +; Add '-' to disable specific statistics. Default is [time,cmd,msg]. +; Stats = time,cmd,msg + +; If zero, open files when elaborated; otherwise, open files on +; first read or write. Default is 0. +; DelayFileOpen = 1 + +; Control VHDL files opened for write. +; 0 = Buffered, 1 = Unbuffered +UnbufferedOutput = 0 + +; Control the number of VHDL files open concurrently. +; This number should always be less than the current ulimit +; setting for max file descriptors. +; 0 = unlimited +ConcurrentFileLimit = 40 + +; If nonzero, close files as soon as there is either an explicit call to +; file_close, or when the file variable's scope is closed. When zero, a +; file opened in append mode is not closed in case it is immediately +; reopened in append mode; otherwise, the file will be closed at the +; point it is reopened. +; AppendClose = 1 + +; Control the number of hierarchical regions displayed as +; part of a signal name shown in the Wave window. +; A value of zero tells VSIM to display the full name. +; The default is 0. +; WaveSignalNameWidth = 0 + +; Turn off warnings when changing VHDL constants and generics +; Default is 1 to generate warning messages +; WarnConstantChange = 0 + +; Turn off warnings from accelerated versions of the std_logic_arith, +; std_logic_unsigned, and std_logic_signed packages. +; StdArithNoWarnings = 1 + +; Turn off warnings from accelerated versions of the IEEE numeric_std +; and numeric_bit packages. +; NumericStdNoWarnings = 1 + +; Use old-style (pre-6.6) VHDL FOR GENERATE statement iteration names +; in the design hierarchy. +; This style is controlled by the value of the GenerateFormat +; value described next. Default is to use new-style names, which +; comprise the generate statement label, '(', the value of the generate +; parameter, and a closing ')'. +; Set this to 1 to use old-style names. +; OldVhdlForGenNames = 1 + +; Control the format of the old-style VHDL FOR generate statement region +; name for each iteration. Do not quote the value. +; The format string here must contain the conversion codes %s and %d, +; in that order, and no other conversion codes. The %s represents +; the generate statement label; the %d represents the generate parameter value +; at a particular iteration (this is the position number if the generate parameter +; is of an enumeration type). Embedded whitespace is allowed (but discouraged); +; leading and trailing whitespace is ignored. +; Application of the format must result in a unique region name over all +; loop iterations for a particular immediately enclosing scope so that name +; lookup can function properly. The default is %s__%d. +; GenerateFormat = %s__%d + +; Enable more efficient logging of VHDL Variables. +; Logging VHDL variables without this enabled, while possible, is very +; inefficient. Enabling this will provide a more efficient logging methodology +; at the expense of more memory usage. By default this feature is disabled (0). +; To enabled this feature, set this variable to 1. +; VhdlVariableLogging = 1 + +; Enable logging of VHDL access type variables and their designated objects. +; This setting will allow both variables of an access type ("access variables") +; and their designated objects ("access objects") to be logged. Logging a +; variable of an access type will automatically also cause the designated +; object(s) of that variable to be logged as the simulation progresses. +; Further, enabling this allows access objects to be logged by name. By default +; this feature is disabled (0). To enable this feature, set this variable to 1. +; Enabling this will automatically enable the VhdlVariableLogging feature also. +; AccessObjDebug = 1 + +; Make each VHDL package in a PDU has its own separate copy of the package instead +; of sharing the package between PDUs. The default is to share packages. +; To ensure that each PDU has its own set of packages, set this variable to 1. +; VhdlSeparatePduPackage = 1 + +; Specify whether checkpoint files should be compressed. +; The default is 1 (compressed). +; CheckpointCompressMode = 0 + +; Specify gcc compiler used in the compilation of automatically generated DPI exportwrapper. +; Use custom gcc compiler located at this path rather than the default path. +; The path should point directly at a compiler executable. +; DpiCppPath = /bin/gcc +; +; Specify the compiler version from the list of support GNU compilers. +; examples 4.7.4, 5.3.0, 7.4.0 +; DpiCppInstall = 7.4.0 + +; Specify whether to enable SystemVerilog DPI "out-of-the-blue" calls. +; The term "out-of-the-blue" refers to SystemVerilog export function calls +; made from C functions that don't have the proper context setup +; (as is the case when running under "DPI-C" import functions). +; When this is enabled, one can call a DPI export function +; (but not task) from any C code. +; the setting of this variable can be one of the following values: +; 0 : dpioutoftheblue call is disabled (default) +; 1 : dpioutoftheblue call is enabled, but export call debug support is not available. +; 2 : dpioutoftheblue call is enabled, and limited export call debug support is available. +; DpiOutOfTheBlue = 1 + +; Specify whether continuous assignments are run before other normal priority +; processes scheduled in the same iteration. This event ordering minimizes race +; differences between optimized and non-optimized designs, and is the default +; behavior beginning with the 6.5 release. For pre-6.5 event ordering, set +; ImmediateContinuousAssign to 0. +; The default is 1 (enabled). +; ImmediateContinuousAssign = 0 + +; List of dynamically loaded objects for Verilog PLI applications +; Veriuser = veriuser.sl + +; Which default VPI object model should the tool conform to? +; The 1364 modes are Verilog-only, for backwards compatibility with older +; libraries, and SystemVerilog objects are not available in these modes. +; +; In the absence of a user-specified default, the tool default is the +; latest available LRM behavior. +; Options for PliCompatDefault are: +; VPI_COMPATIBILITY_VERSION_1364v1995 +; VPI_COMPATIBILITY_VERSION_1364v2001 +; VPI_COMPATIBILITY_VERSION_1364v2005 +; VPI_COMPATIBILITY_VERSION_1800v2005 +; VPI_COMPATIBILITY_VERSION_1800v2008 +; +; Synonyms for each string are also recognized: +; VPI_COMPATIBILITY_VERSION_1364v1995 (1995, 95, 1364v1995, 1364V1995, VL1995) +; VPI_COMPATIBILITY_VERSION_1364v2001 (2001, 01, 1364v2001, 1364V2001, VL2001) +; VPI_COMPATIBILITY_VERSION_1364v2005 (1364v2005, 1364V2005, VL2005) +; VPI_COMPATIBILITY_VERSION_1800v2005 (2005, 05, 1800v2005, 1800V2005, SV2005) +; VPI_COMPATIBILITY_VERSION_1800v2008 (2008, 08, 1800v2008, 1800V2008, SV2008) + + +; PliCompatDefault = VPI_COMPATIBILITY_VERSION_1800v2005 + +; Specify whether the Verilog system task $fopen or vpi_mcd_open() +; will create directories that do not exist when opening the file +; in "a" or "w" mode. +; The default is 0 (do not create non-existent directories) +; CreateDirForFileAccess = 1 + +; Specify default options for the restart command. Options can be one +; or more of: -force -nobreakpoint -nolist -nolog -nowave -noassertions +; DefaultRestartOptions = -force + + +; Specify default UVM-aware debug options if the vsim -uvmcontrol switch is not used. +; Valid options include: all, none, verbose, disable, struct, reseed, msglog, trlog, certe. +; Options can be enabled by just adding the name, or disabled by prefixing the option with a "-". +; The list of options must be delimited by commas, without spaces or tabs. +; +; Some examples +; To turn on all available UVM-aware debug features: +; UVMControl = all +; To turn on the struct window, mesage logging, and transaction logging: +; UVMControl = struct,msglog,trlog +; To turn on all options except certe: +; UVMControl = all,-certe +; To completely disable all UVM-aware debug functionality: +; UVMControl = disable + +; Specify the WildcardFilter setting. +; A space separated list of object types to be excluded when performing +; wildcard matches with log, wave, etc commands. The default value for this variable is: +; "Variable Constant Generic Parameter SpecParam Memory Assertion Cover Endpoint ScVariable CellInternal ImmediateAssert VHDLFile" +; See "Using the WildcardFilter Preference Variable" in the documentation for +; details on how to use this variable and for descriptions of the filter types. +WildcardFilter = Variable Constant Generic Parameter SpecParam Memory Assertion Cover Endpoint ScVariable CellInternal ImmediateAssert VHDLFile + +; Specify the WildcardSizeThreshold setting. +; This integer setting specifies the size at which objects will be excluded when +; performing wildcard matches with log, wave, etc commands. Objects of size equal +; to or greater than the WildcardSizeThreshold will be filtered out from the wildcard +; matches. The size is a simple calculation of number of bits or items in the object. +; The default value is 8k (8192). Setting this value to 0 will disable the checking +; of object size against this threshold and allow all objects of any size to be logged. +WildcardSizeThreshold = 8192 + +; Specify whether warning messages are output when objects are filtered out due to the +; WildcardSizeThreshold. The default is 0 (no messages generated). +WildcardSizeThresholdVerbose = 0 + +; Turn on (1) or off (0) WLF file compression. +; The default is 1 (compress WLF file). +; WLFCompress = 0 + +; Specify whether to save all design hierarchy (1) in the WLF file +; or only regions containing logged signals (0). +; The default is 0 (save only regions with logged signals). +; WLFSaveAllRegions = 1 + +; WLF file time limit. Limit WLF file by time, as closely as possible, +; to the specified amount of simulation time. When the limit is exceeded +; the earliest times get truncated from the file. +; If both time and size limits are specified the most restrictive is used. +; UserTimeUnits are used if time units are not specified. +; The default is 0 (no limit). Example: WLFTimeLimit = {100 ms} +; WLFTimeLimit = 0 + +; WLF file size limit. Limit WLF file size, as closely as possible, +; to the specified number of megabytes. If both time and size limits +; are specified then the most restrictive is used. +; The default is 0 (no limit). +; WLFSizeLimit = 1000 + +; Specify whether or not a WLF file should be deleted when the +; simulation ends. A value of 1 will cause the WLF file to be deleted. +; The default is 0 (do not delete WLF file when simulation ends). +; WLFDeleteOnQuit = 1 + +; Specify whether or not a WLF file should be optimized during +; simulation. If set to 0, the WLF file will not be optimized. +; The default is 1, optimize the WLF file. +; WLFOptimize = 0 + +; Specify the name of the WLF file. +; The default is vsim.wlf +; WLFFilename = vsim.wlf + +; Specify whether to lock the WLF file. +; Locking the file prevents other invocations of ModelSim/Questa tools from +; inadvertently overwriting the WLF file. +; The default is 1, lock the WLF file. +; WLFFileLock = 0 + +; Specify the update interval for the WLF file in live simulation. +; The interval is given in seconds. +; The value is the smallest interval between WLF file updates. The WLF file +; will be flushed (updated) after (at least) the interval has elapsed, ensuring +; that the data is correct when viewed from a separate viewer. +; A value of 0 means that no updating will occur. +; The default value is 10 seconds. +; WLFUpdateInterval = 10 + +; Specify the WLF cache size limit for WLF files. +; The value is given in megabytes. A value of 0 turns off the cache. +; On non-Windows platforms the default WLFCacheSize setting is 2000 (megabytes). +; On Windows, the default value is 1000 (megabytes) to help to avoid filling +; process memory. +; WLFSimCacheSize allows a different cache size to be set for a live simulation +; WLF file, independent of post-simulation WLF file viewing. If WLFSimCacheSize +; is not set, it defaults to the WLFCacheSize value. +; WLFCacheSize = 2000 +; WLFSimCacheSize = 500 + +; Specify the WLF file event collapse mode. +; 0 = Preserve all events and event order. (same as -wlfnocollapse) +; 1 = Only record values of logged objects at the end of a simulator iteration. +; (same as -wlfcollapsedelta) +; 2 = Only record values of logged objects at the end of a simulator time step. +; (same as -wlfcollapsetime) +; The default is 1. +; WLFCollapseMode = 0 + +; Specify whether WLF file logging can use threads on multi-processor machines. +; If 0, no threads will be used; if 1, threads will be used if the system has +; more than one processor. +; WLFUseThreads = 1 + +; Specify the size of objects that will trigger "large object" messages +; at log/wave/list time. The size calculation of the object is the same as that +; used by the WildcardSizeThreshold. The default LargeObjectSize size is 500,000. +; Setting LargeObjectSize to 0 will disable these messages. +; LargeObjectSize = 500000 + +; Specify the depth of stack frames returned by $stacktrace([level]). +; This depth will be picked up when the optional 'level' argument +; is not specified or its value is not a positive integer. +; StackTraceDepth = 100 + +; Turn on/off undebuggable SystemC type warnings. Default is on. +; ShowUndebuggableScTypeWarning = 0 + +; Turn on/off unassociated SystemC name warnings. Default is off. +; ShowUnassociatedScNameWarning = 1 + +; Turn on/off SystemC IEEE 1666 deprecation warnings. Default is off. +; ScShowIeeeDeprecationWarnings = 1 + +; Turn on/off the check for multiple drivers on a SystemC sc_signal. Default is off. +; For SystemC-2.3.2 the valid values are 0,1 and 2 +; 0 = SC_SIGNAL_WRITE_CHECK_DISABLE_ +; 1 = SC_SIGNAL_WRITE_CHECK_DEFAULT_ +; 2 = SC_SIGNAL_WRITE_CHECK_CONFLICT_ +; For SystemC-2.2 the valid values are 0 and 1 +; 0 = DISABLE +; 1 = ENABLE +; ScEnableScSignalWriteCheck = 1 + +; Set SystemC default time unit. +; Set to fs, ps, ns, us, ms, or sec with optional +; prefix of 1, 10, or 100. The default is 1 ns. +; The ScTimeUnit value is honored if it is coarser than Resolution. +; If ScTimeUnit is finer than Resolution, it is set to the value +; of Resolution. For example, if Resolution is 100ps and ScTimeUnit is ns, +; then the default time unit will be 1 ns. However if Resolution +; is 10 ns and ScTimeUnit is ns, then the default time unit will be 10 ns. +ScTimeUnit = ns + +; Set SystemC sc_main stack size. The stack size is set as an integer +; number followed by the unit which can be Kb(Kilo-byte), Mb(Mega-byte) or +; Gb(Giga-byte). Default is 10 Mb. The stack size for sc_main depends +; on the amount of data on the sc_main() stack and the memory required +; to succesfully execute the longest function call chain of sc_main(). +ScMainStackSize = 10 Mb + +; Set SystemC thread stack size. The stack size is set as an integer +; number followed by the unit which can be Kb(Kilo-byte), Mb(Mega-byte) or +; Gb(Giga-byte). The stack size for sc_thread depends +; on the amount of data on the sc_thread stack and the memory required +; to succesfully execute the thread. +; ScStackSize = 1 Mb + +; Turn on/off execution of remainder of sc_main upon quitting the current +; simulation session. If the cumulative length of sc_main() in terms of +; simulation time units is less than the length of the current simulation +; run upon quit or restart, sc_main() will be in the middle of execution. +; This switch gives the option to execute the remainder of sc_main upon +; quitting simulation. The drawback of not running sc_main till the end +; is memory leaks for objects created by sc_main. If on, the remainder of +; sc_main will be executed ignoring all delays. This may cause the simulator +; to crash if the code in sc_main is dependent on some simulation state. +; Default is on. +ScMainFinishOnQuit = 1 + +; Enable calling of the DPI export taks/functions from the +; SystemC start_of_simulation() callback. +; The default is off. +; EnableDpiSosCb = 1 + + +; Set the SCV relationship name that will be used to identify phase +; relations. If the name given to a transactor relation matches this +; name, the transactions involved will be treated as phase transactions +ScvPhaseRelationName = mti_phase + +; Customize the vsim kernel shutdown behavior at the end of the simulation. +; Some common causes of the end of simulation are $finish (implicit or explicit), +; sc_stop(), tf_dofinish(), and assertion failures. +; This should be set to "ask", "exit", or "stop". The default is "ask". +; "ask" -- In batch mode, the vsim kernel will abruptly exit. +; In GUI mode, a dialog box will pop up and ask for user confirmation +; whether or not to quit the simulation. +; "stop" -- Cause the simulation to stay loaded in memory. This can make some +; post-simulation tasks easier. +; "exit" -- The simulation will abruptly exit without asking for any confirmation. +; "final" -- Run SystemVerilog final blocks then behave as "stop". +; Note: This variable can be overridden with the vsim "-onfinish" command line switch. +OnFinish = ask + +; Print pending deferred assertion messages. +; Deferred assertion messages may be scheduled after the $finish in the same +; time step. Deferred assertions scheduled to print after the $finish are +; printed before exiting with severity level NOTE since it's not known whether +; the assertion is still valid due to being printed in the active region +; instead of the reactive region where they are normally printed. +; OnFinishPendingAssert = 1; + +; Print "simstats" result. Default is 0. +; 0 == do not print simstats +; 1 == print at end of simulation +; 2 == print at end of each run command and end of simulation +; PrintSimStats = 1 + +; Assertion File - alternate file for storing VHDL/PSL/Verilog assertion messages +; AssertFile = assert.log + +; Enable assertion counts. Default is off. +; AssertionCounts = 1 + +; Run simulator in assertion debug mode. Default is off. +; AssertionDebug = 1 + +; Turn on/off PSL/SVA/VHDL assertion enable. Default is on. +; AssertionEnable = 0 + +; Set PSL/SVA/VHDL concurrent assertion fail limit. Default is -1. +; Any positive integer, -1 for infinity. +; AssertionLimit = 1 + +; Turn on/off concurrent assertion pass log. Default is off. +; Assertion pass logging is only enabled when assertion is browseable +; and assertion debug is enabled. +; AssertionPassLog = 1 + +; Turn on/off PSL concurrent assertion fail log. Default is on. +; The flag does not affect SVA +; AssertionFailLog = 0 + +; Turn on/off SVA concurrent assertion local var printing in -assertdebug mode. Default is on. +; AssertionFailLocalVarLog = 0 + +; Set action type for PSL/SVA concurrent assertion fail action. Default is continue. +; 0 = Continue 1 = Break 2 = Exit +; AssertionFailAction = 1 + +; Enable the active thread monitor in the waveform display when assertion debug is enabled. +; AssertionActiveThreadMonitor = 1 + +; Control how many waveform rows will be used for displaying the active threads. Default is 5. +; AssertionActiveThreadMonitorLimit = 5 + +; Assertion thread limit after which assertion would be killed/switched off. +; The default is -1 (unlimited). If the number of threads for an assertion go +; beyond this limit, the assertion would be either switched off or killed. This +; limit applies to only assert directives. +;AssertionThreadLimit = -1 + +; Action to be taken once the assertion thread limit is reached. Default +; is kill. It can have a value of off or kill. In case of kill, all the existing +; threads are terminated and no new attempts are started. In case of off, the +; existing attempts keep on evaluating but no new attempts are started. This +; variable applies to only assert directives. +;AssertionThreadLimitAction = kill + +; Cover thread limit after which cover would be killed/switched off. +; The default is -1 (unlimited). If the number of threads for a cover go +; beyond this limit, the cover would be either switched off or killed. This +; limit applies to only cover directives. +;CoverThreadLimit = -1 + +; Action to be taken once the cover thread limit is reached. Default +; is kill. It can have a value of off or kill. In case of kill, all the existing +; threads are terminated and no new attempts are started. In case of off, the +; existing attempts keep on evaluating but no new attempts are started. This +; variable applies to only cover directives. +;CoverThreadLimitAction = kill + + +; By default immediate assertions do not participate in Assertion Coverage calculations +; unless they are executed. This switch causes all immediate assertions in the design +; to participate in Assertion Coverage calculations, whether attempted or not. +; UnattemptedImmediateAssertions = 0 + +; By default immediate covers participate in Coverage calculations +; whether they are attempted or not. This switch causes all unattempted +; immediate covers in the design to stop participating in Coverage +; calculations. +; UnattemptedImmediateCovers = 0 + +; By default pass action block is not executed for assertions on vacuous +; success. The following variable is provided to enable execution of +; pass action block on vacuous success. The following variable is only effective +; if the user does not disable pass action block execution by using either +; system tasks or CLI. Also there is a performance penalty for enabling +; the following variable. +;AssertionEnableVacuousPassActionBlock = 1 + +; As per strict 1850-2005 PSL LRM, an always property can either pass +; or fail. However, by default, Questa reports multiple passes and +; multiple fails on top always/never property (always/never operator +; is the top operator under Verification Directive). The reason +; being that Questa reports passes and fails on per attempt of the +; top always/never property. Use the following flag to instruct +; Questa to strictly follow LRM. With this flag, all assert/never +; directives will start an attempt once at start of simulation. +; The attempt can either fail, match or match vacuously. +; For e.g. if always is the top operator under assert, the always will +; keep on checking the property at every clock. If the property under +; always fails, the directive will be considered failed and no more +; checking will be done for that directive. A top always property, +; if it does not fail, will show a pass at end of simulation. +; The default value is '0' (i.e. zero is off). For example: +; PslOneAttempt = 1 + +; Specify the number of clock ticks to represent infinite clock ticks. +; This affects eventually!, until! and until_!. If at End of Simulation +; (EOS) an active strong-property has not clocked this number of +; clock ticks then neither pass or fail (vacuous match) is returned +; else respective fail/pass is returned. The default value is '0' (zero) +; which effectively does not check for clock tick condition. For example: +; PslInfinityThreshold = 5000 + +; Control how many thread start times will be preserved for ATV viewing for a given assertion +; instance. Default is -1 (ALL). +; ATVStartTimeKeepCount = -1 + +; Turn on/off code coverage +; CodeCoverage = 0 + +; This option applies to condition and expression coverage UDP tables. It +; has no effect unless UDP is enabled for coverage with vcom/vlog/vopt -coverudp. +; If this option is used and a match occurs in more than one row in the UDP table, +; none of the counts for all matching rows is incremented. By default, counts are +; incremented for all matching rows. +; CoverCountAll = 1 + +; Turn off automatic inclusion of VHDL integers in toggle coverage. Default +; is to include them. +; ToggleNoIntegers = 1 + +; Set the maximum number of values that are collected for toggle coverage of +; VHDL integers. Default is 100; +; ToggleMaxIntValues = 100 + +; Set the maximum number of values that are collected for toggle coverage of +; Verilog real. Default is 100; +; ToggleMaxRealValues = 100 + +; Turn on automatic inclusion of Verilog integers in toggle coverage, except +; for enumeration types. Default is to include them. +; ToggleVlogIntegers = 0 + +; Turn on automatic inclusion of Verilog real type in toggle coverage, except +; for shortreal types. Default is to not include them. +; ToggleVlogReal = 1 + +; Turn on automatic inclusion of Verilog fixed-size unpacked arrays, VHDL multi-d arrays +; and VHDL arrays-of-arrays in toggle coverage. +; Default is to not include them. +; ToggleFixedSizeArray = 1 + +; Increase or decrease the maximum size of Verilog unpacked fixed-size arrays, +; VHDL multi-d arrays and VHDL arrays-of-arrays that are included for toggle coverage. +; This leads to a longer simulation time with bigger arrays covered with toggle coverage. +; Default is 1024. +; ToggleMaxFixedSizeArray = 1024 + +; Treat Verilog multi-dimensional packed vectors and packed structures as equivalently sized +; one-dimensional packed vectors for toggle coverage. Default is 0. +; TogglePackedAsVec = 0 + +; Treat Verilog enumerated types as equivalently sized one-dimensional packed vectors for +; toggle coverage. Default is 0. +; ToggleVlogEnumBits = 0 + +; Turn off automatic inclusion of VHDL records in toggle coverage. +; Default is to include them. +; ToggleVHDLRecords = 0 + +; Limit the widths of registers automatically tracked for toggle coverage. Default is 128. +; For unlimited width, set to 0. +; ToggleWidthLimit = 128 + +; Limit the counts that are tracked for toggle coverage. When all edges for a bit have +; reached this count, further activity on the bit is ignored. Default is 1. +; For unlimited counts, set to 0. +; ToggleCountLimit = 1 + +; Change the mode of extended toggle coverage. Default is 3. Valid modes are 1, 2 and 3. +; Following is the toggle coverage calculation criteria based on extended toggle mode: +; Mode 1: 0L->1H & 1H->0L & any one 'Z' transition (to/from 'Z'). +; Mode 2: 0L->1H & 1H->0L & one transition to 'Z' & one transition from 'Z'. +; Mode 3: 0L->1H & 1H->0L & all 'Z' transitions. +; ExtendedToggleMode = 3 + +; Enable toggle statistics collection only for ports. Default is 0. +; TogglePortsOnly = 1 + +; Limit the counts that are tracked for Focussed Expression Coverage. When a bin has +; reached this count, further tracking of the input patterns linked to it is ignored. +; Default is 1. For unlimited counts, set to 0. +; NOTE: Changing this value from its default value may affect simulation performance. +; FecCountLimit = 1 + +; Limit the counts that are tracked for UDP Coverage. When a bin has +; reached this count, further tracking of the input patterns linked to it is ignored. +; Default is 1. For unlimited counts, set to 0. +; NOTE: Changing this value from its default value may affect simulation performance. +; UdpCountLimit = 1 + +; Control toggle coverage deglitching period. A period of 0, eliminates delta +; cycle glitches. This is the default. The value of ToggleDeglitchPeriod needs to be either +; 0 or a time string that includes time units. Examples: 0 or 10.0ps or "10.0 ps". +; ToggleDeglitchPeriod = 10.0ps + +; Turn on/off all PSL/SVA cover directive enables. Default is on. +; CoverEnable = 0 + +; Turn on/off PSL/SVA cover log. Default is off "0". +; CoverLog = 1 + +; Set "at_least" value for all PSL/SVA cover directives. Default is 1. +; CoverAtLeast = 2 + +; Set "limit" value for all PSL/SVA cover directives. Default is -1. +; Any positive integer, -1 for infinity. +; CoverLimit = 1 + +; Specify the coverage database filename. +; Default is "" (i.e. database is NOT automatically saved on close). +; UCDBFilename = vsim.ucdb + +; Specify the maximum limit for the number of Cross (bin) products reported +; in XML and UCDB report against a Cross. A warning is issued if the limit +; is crossed. Default is zero. vsim switch -cvgmaxrptrhscross can override this +; setting. +; MaxReportRhsSVCrossProducts = 1000 + +; Specify the override for the "auto_bin_max" option for the Covergroups. +; If not specified then value from Covergroup "option" is used. +; SVCoverpointAutoBinMax = 64 + +; Specify the override for the value of "cross_num_print_missing" +; option for the Cross in Covergroups. If not specified then value +; specified in the "option.cross_num_print_missing" is used. This +; is a runtime option. NOTE: This overrides any "cross_num_print_missing" +; value specified by user in source file and any SVCrossNumPrintMissingDefault +; specified in modelsim.ini. +; SVCrossNumPrintMissing = 0 + +; Specify whether to use the value of "cross_num_print_missing" +; option in report and GUI for the Cross in Covergroups. If not specified then +; cross_num_print_missing is ignored for creating reports and displaying +; covergroups in GUI. Default is 0, which means ignore "cross_num_print_missing". +; UseSVCrossNumPrintMissing = 0 + +; Specify the threshold of Coverpoint wildcard bin value range size, above which +; a warning will be triggered. The default is 4K -- 12 wildcard bits. +; SVCoverpointWildCardBinValueSizeWarn = 4096 + +; Specify the override for the value of "strobe" option for the +; Covergroup Type. If not specified then value in "type_option.strobe" +; will be used. This is runtime option which forces "strobe" to +; user specified value and supersedes user specified values in the +; SystemVerilog Code. NOTE: This also overrides the compile time +; default value override specified using "SVCovergroupStrobeDefault" +; SVCovergroupStrobe = 0 + +; Override for explicit assignments in source code to "option.goal" of +; SystemVerilog covergroup, coverpoint, and cross. It also overrides the +; default value of "option.goal" (defined to be 100 in the SystemVerilog +; LRM) and the value of modelsim.ini variable "SVCovergroupGoalDefault". +; SVCovergroupGoal = 100 + +; Override for explicit assignments in source code to "type_option.goal" of +; SystemVerilog covergroup, coverpoint, and cross. It also overrides the +; default value of "type_option.goal" (defined to be 100 in the SystemVerilog +; LRM) and the value of modelsim.ini variable "SVCovergroupTypeGoalDefault". +; SVCovergroupTypeGoal = 100 + +; Enforce the 6.3 behavior of covergroup get_coverage() and get_inst_coverage() +; builtin functions, and report. This setting changes the default values of +; option.get_inst_coverage and type_option.merge_instances to ensure the 6.3 +; behavior if explicit assignments are not made on option.get_inst_coverage and +; type_option.merge_instances by the user. There are two vsim command line +; options, -cvg63 and -nocvg63 to override this setting from vsim command line. +; The default value of this variable from release 6.6 onwards is 0. This default +; drives compliance with the clarified behavior in the IEEE 1800-2009 standard. +; SVCovergroup63Compatibility = 0 + +; Enforce the default behavior of covergroup get_coverage() builtin function, GUI +; and report. This variable sets the default value of type_option.merge_instances. +; There are two vsim command line options, -cvgmergeinstances and +; -nocvgmergeinstances to override this setting from vsim command line. +; The default value of this variable, -1 (don't care), allows the tool to determine +; the effective value, based on factors related to capacity and optimization. +; The type_option.merge_instances appears in the GUI and coverage reports as either +; auto(1) or auto(0), depending on whether the effective value was determined to +; be a 1 or a 0. +; SVCovergroupMergeInstancesDefault = -1 + +; Enable or disable generation of more detailed information about the sampling +; of covergroup, cross, and coverpoints. It provides the details of the number +; of times the covergroup instance and type were sampled, as well as details +; about why covergroup, cross and coverpoint were not covered. A non-zero value +; is to enable this feature. 0 is to disable this feature. Default is 0 +; SVCovergroupSampleInfo = 0 + +; Specify the maximum number of Coverpoint bins in whole design for +; all Covergroups. +; MaxSVCoverpointBinsDesign = 2147483648 + +; Specify maximum number of Coverpoint bins in any instance of a Covergroup, default is 2^10 bins +; MaxSVCoverpointBinsInst = 1048576 + +; Specify the maximum number of Cross bins in whole design for +; all Covergroups. +; MaxSVCrossBinsDesign = 2147483648 + +; Specify maximum number of Cross bins in any instance of a Covergroup, default is 2^16 bins +; MaxSVCrossBinsInst = 67108864 + +; Specify whether vsim will collect the coverage data of zero-weight coverage items or not. +; By default, this variable is set 0, in which case option.no_collect setting will take effect. +; If this variable is set to 1, all zero-weight coverage items will not be saved. +; Note that the usage of vsim switch -cvgzwnocollect, if present, will override the setting +; of this variable. +; CvgZWNoCollect = 1 + +; Specify a space delimited list of double quoted TCL style +; regular expressions which will be matched against the text of all messages. +; If any regular expression is found to be contained within any message, the +; status for that message will not be propagated to the UCDB TESTSTATUS. +; If no match is detected, then the status will be propagated to the +; UCDB TESTSTATUS. More than one such regular expression text is allowed, +; and each message text is compared for each regular expression in the list. +; UCDBTestStatusMessageFilter = "Done with Test Bench" "Ignore .* message" + +; Set weight for all PSL/SVA cover directives. Default is 1. +; CoverWeight = 2 + +; Check vsim plusargs. Default is 0 (off). +; 0 = Don't check plusargs +; 1 = Warning on unrecognized plusarg +; 2 = Error and exit on unrecognized plusarg +; CheckPlusargs = 1 + +; Load the specified shared objects with the RTLD_GLOBAL flag. +; This gives global visibility to all symbols in the shared objects, +; meaning that subsequently loaded shared objects can bind to symbols +; in the global shared objects. The list of shared objects should +; be whitespace delimited. This option is not supported on the +; Windows or AIX platforms. +; GlobalSharedObjectList = example1.so example2.so example3.so + +; Generate the stub definitions for the undefined symbols in the shared libraries being +; loaded in the simulation. When this flow is turned on, the undefined symbols will not +; prevent vsim from loading. Calling undefined symbols at runtime will cause fatal error. +; The valid arguments are: on, off, verbose. +; on : turn on the automatic generation of stub definitions. +; off: turn off the flow. The undefined symbols will trigger an immediate load failure. +; verbose: Turn on the flow and report the undefined symbols for each shared library. +; NOTE: This variable can be overriden with vsim switch "-undefsyms". +; The default is on. +; +; UndefSyms = off + +; Enable the support for automatically checkpointing foreign C/C++ libraries. +; The valid arguments are: 0, 1, 2 +; 0: off (default) +; 1: on (manually save/restore user shared library data) +; 2: auto (automatically save/restore user shared library data) +; This option is not supported on the Windows platforms. +; +; AllowCheckpointCpp = 2 + +; Initial seed for the random number generator of the root thread (SystemVerilog). +; NOTE: This variable can be overridden with the vsim "-sv_seed" command line switch. +; The default value is 0. +; Sv_Seed = 0 + +; Specify the solver "engine" that vsim will select for constrained random +; generation. +; Valid values are: +; "auto" - automatically select the best engine for the current +; constraint scenario +; "bdd" - evaluate all constraint scenarios using the BDD solver engine +; "act" - evaluate all constraint scenarios using the ACT solver engine +; While the BDD solver engine is generally efficient with constraint scenarios +; involving bitwise logical relationships, the ACT solver engine can exhibit +; superior performance with constraint scenarios involving large numbers of +; random variables related via arithmetic operators (+, *, etc). +; NOTE: This variable can be overridden with the vsim "-solveengine" command +; line switch. +; The default value is "auto". +; SolveEngine = auto + +; Specify the maximum size that a random dynamic array or queue may be resized +; to by the solver. If the solver attempts to resize a dynamic array or queue +; to a size greater than the specified limit, the solver will abort with an error. +; The default value is 10000. The maximum value is 10000000. A value of 0 is +; equivalent to specifying the maximum value. +; SolveArrayResizeMax = 10000 + +; Specify error message severity when randomize() and randomize(null) failures +; are detected. +; +; Integer value up to two digits are allowed with each digit having the following legal values: +; 0 = No error 1 = Warning 2 = Error 3 = Failure 4 = Fatal +; +; 1) When a value with two digits is used, the digit at tenth place (leftmost digit) represents +; the severtity setting for normal randomize() calls. The digit at ones place (rightmost digit) +; represents the setting for randomize(null) calls. +; +; 2) When a single digit value is used, the setting is applied to both normal randomize() call +; and randomize(null) call. +; +; Example: Fatal error for randomize() failures and NO error for randomize(null) failures +; -solvefailseverity=40 +; +; NOTE: SolveFailSeverity can affect the behavior of SolveFailDebug. When SolveFailDebug is +; enabled, a constraint contradiction report will be displayed for randomize() calls that +; have a message severity >= warning (i.e. constraint contradiction reports will not be +; generated for randomize() calls having a "no error" severity level) +; +; NOTE: This variable can be overridden with the vsim "-solvefailseverity" command +; line switch. +; +; The default is 1 (warning). +; SolveFailSeverity = 1 + +; Error message severity for suppressible errors that are detected in a +; solve/before constraint. +; 0 = No error 1 = Warning 2 = Error 3 = Failure 4 = Fatal +; NOTE: This variable can be overridden with the vsim "-solvebeforeerrorseverity" +; command line switch. +; The default is 3 (failure). +; SolveBeforeErrorSeverity = 3 + +; Error message severity for suppressible errors that are related to +; solve engine capacity limits +; 0 = No error 1 = Warning 2 = Error 3 = Failure 4 = Fatal +; NOTE: This variable can be overridden with the vsim "-solveengineerrorseverity" +; command line switch. +; The default is 3 (failure). +; SolveEngineErrorSeverity = 3 + +; Enable/disable constraint conflicts on randomize() failure +; Valid values: +; 0 - disable solvefaildebug +; 1 - basic debug (no performance penalty) +; 2 - enhanced debug (runtime performance penalty) +; +; NOTE: SolveFailSeverity can affect the behavior of SolveFailDebug. When SolveFailDebug is +; enabled, a constraint contradiction report will be displayed for randomize() calls that +; have a message severity >= warning (i.e. constraint contradiction reports will not be +; generated for randomize() calls having a "no error" severity level) +; +; NOTE: This variable can be overridden with the vsim "-solvefaildebug" command +; line switch. +; +; The default is 1 (basic debug). +; SolveFailDebug = 1 + +; Upon encountering a randomize() failure, generate a simplified testcase that +; will reproduce the failure. Optionally output the testcase to a file. +; Testcases for 'no-solution' failures will only be produced if SolveFailDebug +; is enabled (see above). +; NOTE: This variable can be overridden with the vsim "-solvefailtestcase" +; command line switch. +; The default is OFF (do not generate a testcase). To enable testcase +; generation, uncomment this variable. To redirect testcase generation to a +; file, specify the name of the output file. +; SolveFailTestcase = + +; Specify solver timeout threshold (in seconds). randomize() will fail if the +; CPU time required to evaluate any randset exceeds the specified timeout. +; The default value is 500. A value of 0 will disable timeout failures. +; SolveTimeout = 500 + +; Specify the alternative behavior during solver replay. Must be used when combined with -solvereplay switch. +; SolveReplayOpt=[+|-][,[+|-]]*" +' Valid settings: +; validate : toggle the checking of value changes of non-random variables involved in randomize(). (default is off)" +; SolveReplayOpt=validate + +; Switch to specify options that control the behavior of the solver profiler.. +; Valid options are: +; cputime - use CPU time instead of elapsed time (wall time) to measure performance data (default is off) +; randsets - enable detailed profiling of randsets (default is off) +; testgen - generate testcases for profiled randsets (only when randsets option is enabled) (default is off) +; SolverFProf = [+|-]

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.