]> jspc29.x-matter.uni-frankfurt.de Git - dirich.git/commitdiff
latest Version of threshold FPGA - FLASH included
authorlocal account <adrian@lxhadeb07.gsi.de>
Thu, 22 Jun 2017 08:30:12 +0000 (10:30 +0200)
committerlocal account <adrian@lxhadeb07.gsi.de>
Thu, 22 Jun 2017 08:30:12 +0000 (10:30 +0200)
13 files changed:
code/spi_slave.vhd
pinout/thresholds.lpf
thresholds/compile.pl
thresholds/config_compile_gsi.pl
thresholds/cores/efb.ipx [new file with mode: 0644]
thresholds/cores/efb.lpc [new file with mode: 0644]
thresholds/cores/efb.vhd [new file with mode: 0644]
thresholds/cores/flash.ipx [new file with mode: 0644]
thresholds/cores/flash.lpc [new file with mode: 0644]
thresholds/cores/flash.vhd [new file with mode: 0644]
thresholds/sim/thresh_tb.vhd [new file with mode: 0644]
thresholds/thresholds.prj
thresholds/thresholds.vhd

index f234756c8af02c4336c1b31d02ca5a71922f89d3..1223524944b25db57bdbc9390f5cb00f4d6a7221 100644 (file)
@@ -103,8 +103,8 @@ PROC_GEN_SIGNALS : process begin
         operation_i <= input(23);
         if (input(23) = '0') then  
           READ_OUT  <= '1';
-        else
-          WRITE_OUT <= '1';
+        --else
+        --  WRITE_OUT <= '1';
         end if;
         ADDR_OUT    <= input(31 downto 24);
         state       <= GET_DATA;
index f6f3b6ca3fba9325b211d8fcc94cfca630e6addd..4e91ce1894b0fc39c2fd641c7b87985aa24f37b9 100644 (file)
@@ -1,7 +1,7 @@
 COMMERCIAL ;
 BLOCK RESETPATHS ;
 BLOCK ASYNCPATHS ;
-SYSCONFIG MCCLK_FREQ=33 BACKGROUND_RECONFIG=ON ENABLE_TRANSFR=ENABLE MUX_CONFIGURATION_PORTS=ENABLE ;
+SYSCONFIG MCCLK_FREQ=33.25 BACKGROUND_RECONFIG=ON ENABLE_TRANSFR=ENABLE MUX_CONFIGURATION_PORTS=ENABLE ;
 
 
 LOCATE COMP "MISO_OUT"                       SITE "E1";    #DAC1_CTRL0
index 8a19aa687e9ce69f56c9c1ed9bf6f366dcc1b061..3dfb1e066f400e5989d33fe1563b26e2395d1d54 120000 (symlink)
@@ -1 +1 @@
-../../trb3sc/scripts/compile.pl
\ No newline at end of file
+/home/adrian/git/trb3sc/scripts/compile.pl
\ No newline at end of file
index a356297abc3507ff71d1fd07ef2c073b99f8063a..7a3b0a73ad259a080c30a9609db5de0b7ab7666c 100644 (file)
@@ -1,6 +1,11 @@
+ #Familyname  => 'MachXO3LF',
+ #Devicename  => 'LCMXO3LF-6900C',
+ #Package     => 'CABGA256',
+ #Speedgrade  => '5',
+
 Familyname  => 'MachXO3LF',
-Devicename  => 'LCMXO3LF-6900C',
-Package     => 'CABGA256',
+Devicename  => 'LCMXO3LF-4300E',
+Package     => 'WLCSP81',
 Speedgrade  => '5',
 
 TOPNAME                      => "thresholds",
@@ -15,7 +20,7 @@ nodelist_file                => 'nodelist_frankfurt.txt',
 
 
 #Include only necessary lpf files
-#pinout_file                  => '', #name of pin-out file, if not equal TOPNAME
+pinout_file                  => 'thresholds', #name of pin-out file, if not equal TOPNAME
 include_TDC                  => 0,
 include_GBE                  => 0,
 
diff --git a/thresholds/cores/efb.ipx b/thresholds/cores/efb.ipx
new file mode 100644 (file)
index 0000000..3d1df68
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DiamondModule name="efb" module="EFB" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2017 04 07 13:37:10.538" version="1.2" type="Module" synthesis="synplify" source_format="VHDL">
+  <Package>
+               <File name="efb.lpc" type="lpc" modified="2017 04 07 13:37:08.000"/>
+               <File name="efb.vhd" type="top_level_vhdl" modified="2017 04 07 13:37:08.000"/>
+               <File name="efb_tmpl.vhd" type="template_vhdl" modified="2017 04 07 13:37:08.000"/>
+  </Package>
+</DiamondModule>
diff --git a/thresholds/cores/efb.lpc b/thresholds/cores/efb.lpc
new file mode 100644 (file)
index 0000000..a395056
--- /dev/null
@@ -0,0 +1,90 @@
+[Device]
+Family=machxo3lf
+PartType=LCMXO3LF-6900C
+PartName=LCMXO3LF-6900C-6BG256C
+SpeedGrade=6
+Package=CABGA256
+OperatingCondition=COM
+Status=S
+
+[IP]
+VendorName=Lattice Semiconductor Corporation
+CoreType=LPM
+CoreStatus=Demo
+CoreName=EFB
+CoreRevision=1.2
+ModuleName=efb
+SourceFormat=VHDL
+ParameterFileVersion=1.0
+Date=04/07/2017
+Time=13:37:08
+
+[Parameters]
+Verilog=0
+VHDL=1
+EDIF=1
+Destination=Synplicity
+Expression=BusA(0 to 7)
+Order=Big Endian [MSB:LSB]
+IO=0
+freq=
+i2c1=0
+i2c1config=0
+i2c1_addr=7-Bit Addressing
+i2c1_ce=0
+i2c1_freq=100
+i2c1_sa=10000
+i2c1_we=0
+i2c2=0
+i2c2_addr=7-Bit Addressing
+i2c2_ce=0
+i2c2_freq=100
+i2c2_sa=10000
+i2c2_we=0
+ufm_addr=7-Bit Addressing
+ufm_sa=10000
+pll=0
+pll_cnt=1
+spi=0
+spi_clkinv=0
+spi_cs=1
+spi_en=0
+spi_freq=1
+spi_lsb=0
+spi_mode=Slave
+spi_ib=0
+spi_ph=0
+spi_hs=0
+spi_rxo=0
+spi_rxr=0
+spi_txo=0
+spi_txr=0
+spi_we=0
+static_tc=Static
+tc=0
+tc_clkinv=Positive
+tc_ctr=1
+tc_div=1
+tc_ipcap=0
+tc_mode=CTCM
+tc_ocr=32767
+tc_oflow=1
+tc_o=TOGGLE
+tc_opcomp=0
+tc_osc=0
+tc_sa_oflow=0
+tc_top=65535
+ufm=1
+wb_clk_freq=33.25
+ufm_usage=SHARED_EBR_TAG
+ufm_ebr=2014
+ufm_remain=
+mem_size=32
+ufm_start=
+ufm_init=0
+memfile=
+ufm_dt=hex
+wb=1
+
+[Command]
+cmd_line= -w -n efb -lang vhdl -synth synplify -bus_exp 7 -bb -type efb -arch xo3c00f -freq 33.25 -ufm -ufm_ebr 2014 -mem_size 32 -ufm_0 -wb -dev 6900
diff --git a/thresholds/cores/efb.vhd b/thresholds/cores/efb.vhd
new file mode 100644 (file)
index 0000000..d3a9a33
--- /dev/null
@@ -0,0 +1,202 @@
+-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.9.0.99.2
+-- Module  Version: 1.2
+--/d/jspc29/lattice/diamond/3.9_x64/ispfpga/bin/lin64/scuba -w -n efb -lang vhdl -synth synplify -bus_exp 7 -bb -type efb -arch xo3c00f -freq 33.25 -ufm -ufm_ebr 2014 -mem_size 32 -ufm_0 -wb -dev 6900 
+
+-- Fri Apr  7 13:37:08 2017
+
+library IEEE;
+use IEEE.std_logic_1164.all;
+-- synopsys translate_off
+library MACHXO3L;
+use MACHXO3L.components.all;
+-- synopsys translate_on
+
+entity efb is
+    port (
+        wb_clk_i: in  std_logic; 
+        wb_rst_i: in  std_logic; 
+        wb_cyc_i: in  std_logic; 
+        wb_stb_i: in  std_logic; 
+        wb_we_i: in  std_logic; 
+        wb_adr_i: in  std_logic_vector(7 downto 0); 
+        wb_dat_i: in  std_logic_vector(7 downto 0); 
+        wb_dat_o: out  std_logic_vector(7 downto 0); 
+        wb_ack_o: out  std_logic; 
+        wbc_ufm_irq: out  std_logic);
+end efb;
+
+architecture Structure of efb is
+
+    -- internal signal declarations
+    signal scuba_vhi: std_logic;
+    signal scuba_vlo: std_logic;
+
+    -- local component declarations
+    component VHI
+        port (Z: out  std_logic);
+    end component;
+    component VLO
+        port (Z: out  std_logic);
+    end component;
+    component EFB
+        generic (EFB_I2C1 : in String; EFB_I2C2 : in String; 
+                EFB_SPI : in String; EFB_TC : in String; 
+                EFB_TC_PORTMODE : in String; EFB_UFM : in String; 
+                EFB_WB_CLK_FREQ : in String; DEV_DENSITY : in String; 
+                UFM_INIT_PAGES : in Integer; 
+                UFM_INIT_START_PAGE : in Integer; 
+                UFM_INIT_ALL_ZEROS : in String; 
+                UFM_INIT_FILE_NAME : in String; 
+                UFM_INIT_FILE_FORMAT : in String; 
+                I2C1_ADDRESSING : in String; I2C2_ADDRESSING : in String; 
+                I2C1_SLAVE_ADDR : in String; I2C2_SLAVE_ADDR : in String; 
+                I2C1_BUS_PERF : in String; I2C2_BUS_PERF : in String; 
+                I2C1_CLK_DIVIDER : in Integer; 
+                I2C2_CLK_DIVIDER : in Integer; I2C1_GEN_CALL : in String; 
+                I2C2_GEN_CALL : in String; I2C1_WAKEUP : in String; 
+                I2C2_WAKEUP : in String; SPI_MODE : in String; 
+                SPI_CLK_DIVIDER : in Integer; SPI_LSB_FIRST : in String; 
+                SPI_CLK_INV : in String; SPI_PHASE_ADJ : in String; 
+                SPI_SLAVE_HANDSHAKE : in String; 
+                SPI_INTR_TXRDY : in String; SPI_INTR_RXRDY : in String; 
+                SPI_INTR_TXOVR : in String; SPI_INTR_RXOVR : in String; 
+                SPI_WAKEUP : in String; TC_MODE : in String; 
+                TC_SCLK_SEL : in String; TC_CCLK_SEL : in Integer; 
+                GSR : in String; TC_TOP_SET : in Integer; 
+                TC_OCR_SET : in Integer; TC_OC_MODE : in String; 
+                TC_RESETN : in String; TC_TOP_SEL : in String; 
+                TC_OV_INT : in String; TC_OCR_INT : in String; 
+                TC_ICR_INT : in String; TC_OVERFLOW : in String; 
+                TC_ICAPTURE : in String);
+        port (WBCLKI: in  std_logic; WBRSTI: in  std_logic; 
+            WBCYCI: in  std_logic; WBSTBI: in  std_logic; 
+            WBWEI: in  std_logic; WBADRI7: in  std_logic; 
+            WBADRI6: in  std_logic; WBADRI5: in  std_logic; 
+            WBADRI4: in  std_logic; WBADRI3: in  std_logic; 
+            WBADRI2: in  std_logic; WBADRI1: in  std_logic; 
+            WBADRI0: in  std_logic; WBDATI7: in  std_logic; 
+            WBDATI6: in  std_logic; WBDATI5: in  std_logic; 
+            WBDATI4: in  std_logic; WBDATI3: in  std_logic; 
+            WBDATI2: in  std_logic; WBDATI1: in  std_logic; 
+            WBDATI0: in  std_logic; PLL0DATI7: in  std_logic; 
+            PLL0DATI6: in  std_logic; PLL0DATI5: in  std_logic; 
+            PLL0DATI4: in  std_logic; PLL0DATI3: in  std_logic; 
+            PLL0DATI2: in  std_logic; PLL0DATI1: in  std_logic; 
+            PLL0DATI0: in  std_logic; PLL0ACKI: in  std_logic; 
+            PLL1DATI7: in  std_logic; PLL1DATI6: in  std_logic; 
+            PLL1DATI5: in  std_logic; PLL1DATI4: in  std_logic; 
+            PLL1DATI3: in  std_logic; PLL1DATI2: in  std_logic; 
+            PLL1DATI1: in  std_logic; PLL1DATI0: in  std_logic; 
+            PLL1ACKI: in  std_logic; I2C1SCLI: in  std_logic; 
+            I2C1SDAI: in  std_logic; I2C2SCLI: in  std_logic; 
+            I2C2SDAI: in  std_logic; SPISCKI: in  std_logic; 
+            SPIMISOI: in  std_logic; SPIMOSII: in  std_logic; 
+            SPISCSN: in  std_logic; TCCLKI: in  std_logic; 
+            TCRSTN: in  std_logic; TCIC: in  std_logic; 
+            UFMSN: in  std_logic; WBDATO7: out  std_logic; 
+            WBDATO6: out  std_logic; WBDATO5: out  std_logic; 
+            WBDATO4: out  std_logic; WBDATO3: out  std_logic; 
+            WBDATO2: out  std_logic; WBDATO1: out  std_logic; 
+            WBDATO0: out  std_logic; WBACKO: out  std_logic; 
+            PLLCLKO: out  std_logic; PLLRSTO: out  std_logic; 
+            PLL0STBO: out  std_logic; PLL1STBO: out  std_logic; 
+            PLLWEO: out  std_logic; PLLADRO4: out  std_logic; 
+            PLLADRO3: out  std_logic; PLLADRO2: out  std_logic; 
+            PLLADRO1: out  std_logic; PLLADRO0: out  std_logic; 
+            PLLDATO7: out  std_logic; PLLDATO6: out  std_logic; 
+            PLLDATO5: out  std_logic; PLLDATO4: out  std_logic; 
+            PLLDATO3: out  std_logic; PLLDATO2: out  std_logic; 
+            PLLDATO1: out  std_logic; PLLDATO0: out  std_logic; 
+            I2C1SCLO: out  std_logic; I2C1SCLOEN: out  std_logic; 
+            I2C1SDAO: out  std_logic; I2C1SDAOEN: out  std_logic; 
+            I2C2SCLO: out  std_logic; I2C2SCLOEN: out  std_logic; 
+            I2C2SDAO: out  std_logic; I2C2SDAOEN: out  std_logic; 
+            I2C1IRQO: out  std_logic; I2C2IRQO: out  std_logic; 
+            SPISCKO: out  std_logic; SPISCKEN: out  std_logic; 
+            SPIMISOO: out  std_logic; SPIMISOEN: out  std_logic; 
+            SPIMOSIO: out  std_logic; SPIMOSIEN: out  std_logic; 
+            SPIMCSN7: out  std_logic; SPIMCSN6: out  std_logic; 
+            SPIMCSN5: out  std_logic; SPIMCSN4: out  std_logic; 
+            SPIMCSN3: out  std_logic; SPIMCSN2: out  std_logic; 
+            SPIMCSN1: out  std_logic; SPIMCSN0: out  std_logic; 
+            SPICSNEN: out  std_logic; SPIIRQO: out  std_logic; 
+            TCINT: out  std_logic; TCOC: out  std_logic; 
+            WBCUFMIRQ: out  std_logic; CFGWAKE: out  std_logic; 
+            CFGSTDBY: out  std_logic);
+    end component;
+    attribute NGD_DRC_MASK : integer;
+    attribute NGD_DRC_MASK of Structure : architecture is 1;
+
+begin
+    -- component instantiation statements
+    scuba_vhi_inst: VHI
+        port map (Z=>scuba_vhi);
+
+    scuba_vlo_inst: VLO
+        port map (Z=>scuba_vlo);
+
+    EFBInst_0: EFB
+        generic map (UFM_INIT_FILE_FORMAT=> "HEX", UFM_INIT_FILE_NAME=> "NONE", 
+        UFM_INIT_ALL_ZEROS=> "ENABLED", UFM_INIT_START_PAGE=>  2014, 
+        UFM_INIT_PAGES=>  32, DEV_DENSITY=> "6900L", EFB_UFM=> "ENABLED", 
+        TC_ICAPTURE=> "DISABLED", TC_OVERFLOW=> "DISABLED", TC_ICR_INT=> "OFF", 
+        TC_OCR_INT=> "OFF", TC_OV_INT=> "OFF", TC_TOP_SEL=> "OFF", 
+        TC_RESETN=> "ENABLED", TC_OC_MODE=> "TOGGLE", TC_OCR_SET=>  32767, 
+        TC_TOP_SET=>  65535, GSR=> "ENABLED", TC_CCLK_SEL=>  1, TC_MODE=> "CTCM", 
+        TC_SCLK_SEL=> "PCLOCK", EFB_TC_PORTMODE=> "WB", EFB_TC=> "DISABLED", 
+        SPI_WAKEUP=> "DISABLED", SPI_INTR_RXOVR=> "DISABLED", 
+        SPI_INTR_TXOVR=> "DISABLED", SPI_INTR_RXRDY=> "DISABLED", 
+        SPI_INTR_TXRDY=> "DISABLED", SPI_SLAVE_HANDSHAKE=> "DISABLED", 
+        SPI_PHASE_ADJ=> "DISABLED", SPI_CLK_INV=> "DISABLED", 
+        SPI_LSB_FIRST=> "DISABLED", SPI_CLK_DIVIDER=>  1, SPI_MODE=> "MASTER", 
+        EFB_SPI=> "DISABLED", I2C2_WAKEUP=> "DISABLED", I2C2_GEN_CALL=> "DISABLED", 
+        I2C2_CLK_DIVIDER=>  1, I2C2_BUS_PERF=> "100kHz", I2C2_SLAVE_ADDR=> "0b1000010", 
+        I2C2_ADDRESSING=> "7BIT", EFB_I2C2=> "DISABLED", I2C1_WAKEUP=> "DISABLED", 
+        I2C1_GEN_CALL=> "DISABLED", I2C1_CLK_DIVIDER=>  1, I2C1_BUS_PERF=> "100kHz", 
+        I2C1_SLAVE_ADDR=> "0b1000001", I2C1_ADDRESSING=> "7BIT", 
+        EFB_I2C1=> "DISABLED", EFB_WB_CLK_FREQ=> "33.2")
+        port map (WBCLKI=>wb_clk_i, WBRSTI=>wb_rst_i, WBCYCI=>wb_cyc_i, 
+            WBSTBI=>wb_stb_i, WBWEI=>wb_we_i, WBADRI7=>wb_adr_i(7), 
+            WBADRI6=>wb_adr_i(6), WBADRI5=>wb_adr_i(5), 
+            WBADRI4=>wb_adr_i(4), WBADRI3=>wb_adr_i(3), 
+            WBADRI2=>wb_adr_i(2), WBADRI1=>wb_adr_i(1), 
+            WBADRI0=>wb_adr_i(0), WBDATI7=>wb_dat_i(7), 
+            WBDATI6=>wb_dat_i(6), WBDATI5=>wb_dat_i(5), 
+            WBDATI4=>wb_dat_i(4), WBDATI3=>wb_dat_i(3), 
+            WBDATI2=>wb_dat_i(2), WBDATI1=>wb_dat_i(1), 
+            WBDATI0=>wb_dat_i(0), PLL0DATI7=>scuba_vlo, 
+            PLL0DATI6=>scuba_vlo, PLL0DATI5=>scuba_vlo, 
+            PLL0DATI4=>scuba_vlo, PLL0DATI3=>scuba_vlo, 
+            PLL0DATI2=>scuba_vlo, PLL0DATI1=>scuba_vlo, 
+            PLL0DATI0=>scuba_vlo, PLL0ACKI=>scuba_vlo, 
+            PLL1DATI7=>scuba_vlo, PLL1DATI6=>scuba_vlo, 
+            PLL1DATI5=>scuba_vlo, PLL1DATI4=>scuba_vlo, 
+            PLL1DATI3=>scuba_vlo, PLL1DATI2=>scuba_vlo, 
+            PLL1DATI1=>scuba_vlo, PLL1DATI0=>scuba_vlo, 
+            PLL1ACKI=>scuba_vlo, I2C1SCLI=>scuba_vlo, 
+            I2C1SDAI=>scuba_vlo, I2C2SCLI=>scuba_vlo, 
+            I2C2SDAI=>scuba_vlo, SPISCKI=>scuba_vlo, SPIMISOI=>scuba_vlo, 
+            SPIMOSII=>scuba_vlo, SPISCSN=>scuba_vlo, TCCLKI=>scuba_vlo, 
+            TCRSTN=>scuba_vlo, TCIC=>scuba_vlo, UFMSN=>scuba_vhi, 
+            WBDATO7=>wb_dat_o(7), WBDATO6=>wb_dat_o(6), 
+            WBDATO5=>wb_dat_o(5), WBDATO4=>wb_dat_o(4), 
+            WBDATO3=>wb_dat_o(3), WBDATO2=>wb_dat_o(2), 
+            WBDATO1=>wb_dat_o(1), WBDATO0=>wb_dat_o(0), WBACKO=>wb_ack_o, 
+            PLLCLKO=>open, PLLRSTO=>open, PLL0STBO=>open, PLL1STBO=>open, 
+            PLLWEO=>open, PLLADRO4=>open, PLLADRO3=>open, PLLADRO2=>open, 
+            PLLADRO1=>open, PLLADRO0=>open, PLLDATO7=>open, 
+            PLLDATO6=>open, PLLDATO5=>open, PLLDATO4=>open, 
+            PLLDATO3=>open, PLLDATO2=>open, PLLDATO1=>open, 
+            PLLDATO0=>open, I2C1SCLO=>open, I2C1SCLOEN=>open, 
+            I2C1SDAO=>open, I2C1SDAOEN=>open, I2C2SCLO=>open, 
+            I2C2SCLOEN=>open, I2C2SDAO=>open, I2C2SDAOEN=>open, 
+            I2C1IRQO=>open, I2C2IRQO=>open, SPISCKO=>open, 
+            SPISCKEN=>open, SPIMISOO=>open, SPIMISOEN=>open, 
+            SPIMOSIO=>open, SPIMOSIEN=>open, SPIMCSN7=>open, 
+            SPIMCSN6=>open, SPIMCSN5=>open, SPIMCSN4=>open, 
+            SPIMCSN3=>open, SPIMCSN2=>open, SPIMCSN1=>open, 
+            SPIMCSN0=>open, SPICSNEN=>open, SPIIRQO=>open, TCINT=>open, 
+            TCOC=>open, WBCUFMIRQ=>wbc_ufm_irq, CFGWAKE=>open, 
+            CFGSTDBY=>open);
+
+end Structure;
diff --git a/thresholds/cores/flash.ipx b/thresholds/cores/flash.ipx
new file mode 100644 (file)
index 0000000..5f07965
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DiamondModule name="flash" module="EFB" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2017 05 22 14:32:10.863" version="1.2" type="Module" synthesis="synplify" source_format="VHDL">
+  <Package>
+               <File name="flash.lpc" type="lpc" modified="2017 05 22 14:32:07.000"/>
+               <File name="flash.vhd" type="top_level_vhdl" modified="2017 05 22 14:32:07.000"/>
+               <File name="flash_tmpl.vhd" type="template_vhdl" modified="2017 05 22 14:32:07.000"/>
+  </Package>
+</DiamondModule>
diff --git a/thresholds/cores/flash.lpc b/thresholds/cores/flash.lpc
new file mode 100644 (file)
index 0000000..f676711
--- /dev/null
@@ -0,0 +1,90 @@
+[Device]
+Family=machxo3lf
+PartType=LCMXO3LF-4300E
+PartName=LCMXO3LF-4300E-5MG256C
+SpeedGrade=5
+Package=CSFBGA256
+OperatingCondition=COM
+Status=S
+
+[IP]
+VendorName=Lattice Semiconductor Corporation
+CoreType=LPM
+CoreStatus=Demo
+CoreName=EFB
+CoreRevision=1.2
+ModuleName=flash
+SourceFormat=VHDL
+ParameterFileVersion=1.0
+Date=05/22/2017
+Time=14:32:07
+
+[Parameters]
+Verilog=0
+VHDL=1
+EDIF=1
+Destination=Synplicity
+Expression=BusA(0 to 7)
+Order=Big Endian [MSB:LSB]
+IO=0
+freq=
+i2c1=0
+i2c1config=0
+i2c1_addr=7-Bit Addressing
+i2c1_ce=0
+i2c1_freq=100
+i2c1_sa=10000
+i2c1_we=0
+i2c2=0
+i2c2_addr=7-Bit Addressing
+i2c2_ce=0
+i2c2_freq=100
+i2c2_sa=10000
+i2c2_we=0
+ufm_addr=7-Bit Addressing
+ufm_sa=10000
+pll=0
+pll_cnt=1
+spi=0
+spi_clkinv=0
+spi_cs=1
+spi_en=0
+spi_freq=1
+spi_lsb=0
+spi_mode=Slave
+spi_ib=0
+spi_ph=0
+spi_hs=0
+spi_rxo=0
+spi_rxr=0
+spi_txo=0
+spi_txr=0
+spi_we=0
+static_tc=Static
+tc=0
+tc_clkinv=Positive
+tc_ctr=1
+tc_div=1
+tc_ipcap=0
+tc_mode=CTCM
+tc_ocr=32767
+tc_oflow=1
+tc_o=TOGGLE
+tc_opcomp=0
+tc_osc=0
+tc_sa_oflow=0
+tc_top=65535
+ufm=1
+wb_clk_freq=33.25
+ufm_usage=SHARED_EBR_TAG
+ufm_ebr=765
+ufm_remain=
+mem_size=2
+ufm_start=
+ufm_init=0
+memfile=
+ufm_dt=hex
+wb=1
+
+[Command]
+cmd_line= -w -n flash -lang vhdl -synth synplify -bus_exp 7 -bb -type efb -arch xo3c00f -freq 33.25 -ufm -ufm_ebr 765 -mem_size 2 -ufm_0 -wb -dev 4300
diff --git a/thresholds/cores/flash.vhd b/thresholds/cores/flash.vhd
new file mode 100644 (file)
index 0000000..2031160
--- /dev/null
@@ -0,0 +1,202 @@
+-- VHDL netlist generated by SCUBA Diamond (64-bit) 3.9.0.99.2
+-- Module  Version: 1.2
+--/home/soft/lattice/diamond/3.9_x64/ispfpga/bin/lin64/scuba -w -n flash -lang vhdl -synth synplify -bus_exp 7 -bb -type efb -arch xo3c00f -freq 33.25 -ufm -ufm_ebr 765 -mem_size 2 -ufm_0 -wb -dev 4300 
+
+-- Mon May 22 14:32:07 2017
+
+library IEEE;
+use IEEE.std_logic_1164.all;
+-- synopsys translate_off
+library MACHXO3L;
+use MACHXO3L.components.all;
+-- synopsys translate_on
+
+entity flash is
+    port (
+        wb_clk_i: in  std_logic; 
+        wb_rst_i: in  std_logic; 
+        wb_cyc_i: in  std_logic; 
+        wb_stb_i: in  std_logic; 
+        wb_we_i: in  std_logic; 
+        wb_adr_i: in  std_logic_vector(7 downto 0); 
+        wb_dat_i: in  std_logic_vector(7 downto 0); 
+        wb_dat_o: out  std_logic_vector(7 downto 0); 
+        wb_ack_o: out  std_logic; 
+        wbc_ufm_irq: out  std_logic);
+end flash;
+
+architecture Structure of flash is
+
+    -- internal signal declarations
+    signal scuba_vhi: std_logic;
+    signal scuba_vlo: std_logic;
+
+    -- local component declarations
+    component VHI
+        port (Z: out  std_logic);
+    end component;
+    component VLO
+        port (Z: out  std_logic);
+    end component;
+    component EFB
+        generic (EFB_I2C1 : in String; EFB_I2C2 : in String; 
+                EFB_SPI : in String; EFB_TC : in String; 
+                EFB_TC_PORTMODE : in String; EFB_UFM : in String; 
+                EFB_WB_CLK_FREQ : in String; DEV_DENSITY : in String; 
+                UFM_INIT_PAGES : in Integer; 
+                UFM_INIT_START_PAGE : in Integer; 
+                UFM_INIT_ALL_ZEROS : in String; 
+                UFM_INIT_FILE_NAME : in String; 
+                UFM_INIT_FILE_FORMAT : in String; 
+                I2C1_ADDRESSING : in String; I2C2_ADDRESSING : in String; 
+                I2C1_SLAVE_ADDR : in String; I2C2_SLAVE_ADDR : in String; 
+                I2C1_BUS_PERF : in String; I2C2_BUS_PERF : in String; 
+                I2C1_CLK_DIVIDER : in Integer; 
+                I2C2_CLK_DIVIDER : in Integer; I2C1_GEN_CALL : in String; 
+                I2C2_GEN_CALL : in String; I2C1_WAKEUP : in String; 
+                I2C2_WAKEUP : in String; SPI_MODE : in String; 
+                SPI_CLK_DIVIDER : in Integer; SPI_LSB_FIRST : in String; 
+                SPI_CLK_INV : in String; SPI_PHASE_ADJ : in String; 
+                SPI_SLAVE_HANDSHAKE : in String; 
+                SPI_INTR_TXRDY : in String; SPI_INTR_RXRDY : in String; 
+                SPI_INTR_TXOVR : in String; SPI_INTR_RXOVR : in String; 
+                SPI_WAKEUP : in String; TC_MODE : in String; 
+                TC_SCLK_SEL : in String; TC_CCLK_SEL : in Integer; 
+                GSR : in String; TC_TOP_SET : in Integer; 
+                TC_OCR_SET : in Integer; TC_OC_MODE : in String; 
+                TC_RESETN : in String; TC_TOP_SEL : in String; 
+                TC_OV_INT : in String; TC_OCR_INT : in String; 
+                TC_ICR_INT : in String; TC_OVERFLOW : in String; 
+                TC_ICAPTURE : in String);
+        port (WBCLKI: in  std_logic; WBRSTI: in  std_logic; 
+            WBCYCI: in  std_logic; WBSTBI: in  std_logic; 
+            WBWEI: in  std_logic; WBADRI7: in  std_logic; 
+            WBADRI6: in  std_logic; WBADRI5: in  std_logic; 
+            WBADRI4: in  std_logic; WBADRI3: in  std_logic; 
+            WBADRI2: in  std_logic; WBADRI1: in  std_logic; 
+            WBADRI0: in  std_logic; WBDATI7: in  std_logic; 
+            WBDATI6: in  std_logic; WBDATI5: in  std_logic; 
+            WBDATI4: in  std_logic; WBDATI3: in  std_logic; 
+            WBDATI2: in  std_logic; WBDATI1: in  std_logic; 
+            WBDATI0: in  std_logic; PLL0DATI7: in  std_logic; 
+            PLL0DATI6: in  std_logic; PLL0DATI5: in  std_logic; 
+            PLL0DATI4: in  std_logic; PLL0DATI3: in  std_logic; 
+            PLL0DATI2: in  std_logic; PLL0DATI1: in  std_logic; 
+            PLL0DATI0: in  std_logic; PLL0ACKI: in  std_logic; 
+            PLL1DATI7: in  std_logic; PLL1DATI6: in  std_logic; 
+            PLL1DATI5: in  std_logic; PLL1DATI4: in  std_logic; 
+            PLL1DATI3: in  std_logic; PLL1DATI2: in  std_logic; 
+            PLL1DATI1: in  std_logic; PLL1DATI0: in  std_logic; 
+            PLL1ACKI: in  std_logic; I2C1SCLI: in  std_logic; 
+            I2C1SDAI: in  std_logic; I2C2SCLI: in  std_logic; 
+            I2C2SDAI: in  std_logic; SPISCKI: in  std_logic; 
+            SPIMISOI: in  std_logic; SPIMOSII: in  std_logic; 
+            SPISCSN: in  std_logic; TCCLKI: in  std_logic; 
+            TCRSTN: in  std_logic; TCIC: in  std_logic; 
+            UFMSN: in  std_logic; WBDATO7: out  std_logic; 
+            WBDATO6: out  std_logic; WBDATO5: out  std_logic; 
+            WBDATO4: out  std_logic; WBDATO3: out  std_logic; 
+            WBDATO2: out  std_logic; WBDATO1: out  std_logic; 
+            WBDATO0: out  std_logic; WBACKO: out  std_logic; 
+            PLLCLKO: out  std_logic; PLLRSTO: out  std_logic; 
+            PLL0STBO: out  std_logic; PLL1STBO: out  std_logic; 
+            PLLWEO: out  std_logic; PLLADRO4: out  std_logic; 
+            PLLADRO3: out  std_logic; PLLADRO2: out  std_logic; 
+            PLLADRO1: out  std_logic; PLLADRO0: out  std_logic; 
+            PLLDATO7: out  std_logic; PLLDATO6: out  std_logic; 
+            PLLDATO5: out  std_logic; PLLDATO4: out  std_logic; 
+            PLLDATO3: out  std_logic; PLLDATO2: out  std_logic; 
+            PLLDATO1: out  std_logic; PLLDATO0: out  std_logic; 
+            I2C1SCLO: out  std_logic; I2C1SCLOEN: out  std_logic; 
+            I2C1SDAO: out  std_logic; I2C1SDAOEN: out  std_logic; 
+            I2C2SCLO: out  std_logic; I2C2SCLOEN: out  std_logic; 
+            I2C2SDAO: out  std_logic; I2C2SDAOEN: out  std_logic; 
+            I2C1IRQO: out  std_logic; I2C2IRQO: out  std_logic; 
+            SPISCKO: out  std_logic; SPISCKEN: out  std_logic; 
+            SPIMISOO: out  std_logic; SPIMISOEN: out  std_logic; 
+            SPIMOSIO: out  std_logic; SPIMOSIEN: out  std_logic; 
+            SPIMCSN7: out  std_logic; SPIMCSN6: out  std_logic; 
+            SPIMCSN5: out  std_logic; SPIMCSN4: out  std_logic; 
+            SPIMCSN3: out  std_logic; SPIMCSN2: out  std_logic; 
+            SPIMCSN1: out  std_logic; SPIMCSN0: out  std_logic; 
+            SPICSNEN: out  std_logic; SPIIRQO: out  std_logic; 
+            TCINT: out  std_logic; TCOC: out  std_logic; 
+            WBCUFMIRQ: out  std_logic; CFGWAKE: out  std_logic; 
+            CFGSTDBY: out  std_logic);
+    end component;
+    attribute NGD_DRC_MASK : integer;
+    attribute NGD_DRC_MASK of Structure : architecture is 1;
+
+begin
+    -- component instantiation statements
+    scuba_vhi_inst: VHI
+        port map (Z=>scuba_vhi);
+
+    scuba_vlo_inst: VLO
+        port map (Z=>scuba_vlo);
+
+    EFBInst_0: EFB
+        generic map (UFM_INIT_FILE_FORMAT=> "HEX", UFM_INIT_FILE_NAME=> "NONE", 
+        UFM_INIT_ALL_ZEROS=> "ENABLED", UFM_INIT_START_PAGE=>  765, 
+        UFM_INIT_PAGES=>  2, DEV_DENSITY=> "4300L", EFB_UFM=> "ENABLED", 
+        TC_ICAPTURE=> "DISABLED", TC_OVERFLOW=> "DISABLED", TC_ICR_INT=> "OFF", 
+        TC_OCR_INT=> "OFF", TC_OV_INT=> "OFF", TC_TOP_SEL=> "OFF", 
+        TC_RESETN=> "ENABLED", TC_OC_MODE=> "TOGGLE", TC_OCR_SET=>  32767, 
+        TC_TOP_SET=>  65535, GSR=> "ENABLED", TC_CCLK_SEL=>  1, TC_MODE=> "CTCM", 
+        TC_SCLK_SEL=> "PCLOCK", EFB_TC_PORTMODE=> "WB", EFB_TC=> "DISABLED", 
+        SPI_WAKEUP=> "DISABLED", SPI_INTR_RXOVR=> "DISABLED", 
+        SPI_INTR_TXOVR=> "DISABLED", SPI_INTR_RXRDY=> "DISABLED", 
+        SPI_INTR_TXRDY=> "DISABLED", SPI_SLAVE_HANDSHAKE=> "DISABLED", 
+        SPI_PHASE_ADJ=> "DISABLED", SPI_CLK_INV=> "DISABLED", 
+        SPI_LSB_FIRST=> "DISABLED", SPI_CLK_DIVIDER=>  1, SPI_MODE=> "MASTER", 
+        EFB_SPI=> "DISABLED", I2C2_WAKEUP=> "DISABLED", I2C2_GEN_CALL=> "DISABLED", 
+        I2C2_CLK_DIVIDER=>  1, I2C2_BUS_PERF=> "100kHz", I2C2_SLAVE_ADDR=> "0b1000010", 
+        I2C2_ADDRESSING=> "7BIT", EFB_I2C2=> "DISABLED", I2C1_WAKEUP=> "DISABLED", 
+        I2C1_GEN_CALL=> "DISABLED", I2C1_CLK_DIVIDER=>  1, I2C1_BUS_PERF=> "100kHz", 
+        I2C1_SLAVE_ADDR=> "0b1000001", I2C1_ADDRESSING=> "7BIT", 
+        EFB_I2C1=> "DISABLED", EFB_WB_CLK_FREQ=> "33.2")
+        port map (WBCLKI=>wb_clk_i, WBRSTI=>wb_rst_i, WBCYCI=>wb_cyc_i, 
+            WBSTBI=>wb_stb_i, WBWEI=>wb_we_i, WBADRI7=>wb_adr_i(7), 
+            WBADRI6=>wb_adr_i(6), WBADRI5=>wb_adr_i(5), 
+            WBADRI4=>wb_adr_i(4), WBADRI3=>wb_adr_i(3), 
+            WBADRI2=>wb_adr_i(2), WBADRI1=>wb_adr_i(1), 
+            WBADRI0=>wb_adr_i(0), WBDATI7=>wb_dat_i(7), 
+            WBDATI6=>wb_dat_i(6), WBDATI5=>wb_dat_i(5), 
+            WBDATI4=>wb_dat_i(4), WBDATI3=>wb_dat_i(3), 
+            WBDATI2=>wb_dat_i(2), WBDATI1=>wb_dat_i(1), 
+            WBDATI0=>wb_dat_i(0), PLL0DATI7=>scuba_vlo, 
+            PLL0DATI6=>scuba_vlo, PLL0DATI5=>scuba_vlo, 
+            PLL0DATI4=>scuba_vlo, PLL0DATI3=>scuba_vlo, 
+            PLL0DATI2=>scuba_vlo, PLL0DATI1=>scuba_vlo, 
+            PLL0DATI0=>scuba_vlo, PLL0ACKI=>scuba_vlo, 
+            PLL1DATI7=>scuba_vlo, PLL1DATI6=>scuba_vlo, 
+            PLL1DATI5=>scuba_vlo, PLL1DATI4=>scuba_vlo, 
+            PLL1DATI3=>scuba_vlo, PLL1DATI2=>scuba_vlo, 
+            PLL1DATI1=>scuba_vlo, PLL1DATI0=>scuba_vlo, 
+            PLL1ACKI=>scuba_vlo, I2C1SCLI=>scuba_vlo, 
+            I2C1SDAI=>scuba_vlo, I2C2SCLI=>scuba_vlo, 
+            I2C2SDAI=>scuba_vlo, SPISCKI=>scuba_vlo, SPIMISOI=>scuba_vlo, 
+            SPIMOSII=>scuba_vlo, SPISCSN=>scuba_vlo, TCCLKI=>scuba_vlo, 
+            TCRSTN=>scuba_vlo, TCIC=>scuba_vlo, UFMSN=>scuba_vhi, 
+            WBDATO7=>wb_dat_o(7), WBDATO6=>wb_dat_o(6), 
+            WBDATO5=>wb_dat_o(5), WBDATO4=>wb_dat_o(4), 
+            WBDATO3=>wb_dat_o(3), WBDATO2=>wb_dat_o(2), 
+            WBDATO1=>wb_dat_o(1), WBDATO0=>wb_dat_o(0), WBACKO=>wb_ack_o, 
+            PLLCLKO=>open, PLLRSTO=>open, PLL0STBO=>open, PLL1STBO=>open, 
+            PLLWEO=>open, PLLADRO4=>open, PLLADRO3=>open, PLLADRO2=>open, 
+            PLLADRO1=>open, PLLADRO0=>open, PLLDATO7=>open, 
+            PLLDATO6=>open, PLLDATO5=>open, PLLDATO4=>open, 
+            PLLDATO3=>open, PLLDATO2=>open, PLLDATO1=>open, 
+            PLLDATO0=>open, I2C1SCLO=>open, I2C1SCLOEN=>open, 
+            I2C1SDAO=>open, I2C1SDAOEN=>open, I2C2SCLO=>open, 
+            I2C2SCLOEN=>open, I2C2SDAO=>open, I2C2SDAOEN=>open, 
+            I2C1IRQO=>open, I2C2IRQO=>open, SPISCKO=>open, 
+            SPISCKEN=>open, SPIMISOO=>open, SPIMISOEN=>open, 
+            SPIMOSIO=>open, SPIMOSIEN=>open, SPIMCSN7=>open, 
+            SPIMCSN6=>open, SPIMCSN5=>open, SPIMCSN4=>open, 
+            SPIMCSN3=>open, SPIMCSN2=>open, SPIMCSN1=>open, 
+            SPIMCSN0=>open, SPICSNEN=>open, SPIIRQO=>open, TCINT=>open, 
+            TCOC=>open, WBCUFMIRQ=>wbc_ufm_irq, CFGWAKE=>open, 
+            CFGSTDBY=>open);
+
+end Structure;
diff --git a/thresholds/sim/thresh_tb.vhd b/thresholds/sim/thresh_tb.vhd
new file mode 100644 (file)
index 0000000..74d09e8
--- /dev/null
@@ -0,0 +1,75 @@
+----------------------------------------------------------------------------------
+-- Company: 
+-- Engineer: 
+-- 
+-- Create Date: 05.01.2017 14:31:03
+-- Design Name: 
+-- Module Name: sim_tb - Behavioral
+-- Project Name: 
+-- Target Devices: 
+-- Tool Versions: 
+-- Description: 
+-- 
+-- Dependencies: 
+-- 
+-- Revision:
+-- Revision 0.01 - File Created
+-- Additional Comments:
+-- 
+----------------------------------------------------------------------------------
+
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+library work;
+use work.trb_net_std.all;
+-- Uncomment the following library declaration if using
+-- arithmetic functions with Signed or Unsigned values
+use IEEE.NUMERIC_STD.ALL;
+
+-- Uncomment the following library declaration if instantiating
+-- any Xilinx primitives in this code.
+--library UNISIM;
+--use UNISIM.VComponents.all;
+
+entity sim_tb is
+end sim_tb;
+
+architecture Behavioral of sim_tb is
+signal CLK ,Flag_Lim, Flag_LUT: std_logic := '0';
+signal DOUT : std_logic_vector(15 downto 0);
+constant CLK_PERIOD : time := 20 ns;
+
+begin
+--Input : entity work.input_env
+--    port map(
+--        CLK => CLK,
+--        DOUT => DIN_i
+--    ); 
+
+   thresholds : entity work.thresholds
+    port map(
+    --    CLK  => CLK,
+            DAC_FLAG => '0',
+    OUTPUT   =>  DOUT,
+    MISO_OUT =>open,
+    MOSI_IN  =>'1',--: in  std_logic;
+    SCLK_IN  =>'1',--: in  std_logic;
+    CS_IN    =>'0'--: in  std_logic--;
+    ); 
+    
+   
+
+  CLK_PROC : process is
+  begin
+     CLK <= '1';
+     wait for CLK_PERIOD / 2;
+     CLK <= '0';
+     wait for CLK_PERIOD / 2;
+  end process;
+  
+  
+
+
+
+end Behavioral;
\ No newline at end of file
index b2787ad7aa1a095d69d452420cf0da583995ff43..70135269ecaaa265496acd2d7cfccb5e470dfe2c 100644 (file)
@@ -7,6 +7,7 @@
 #add_file -vhdl -lib work "/d/jspc29/lattice/diamond/3.6_x64/cae_library/synthesis/vhdl/machxo3lf.vhd"
 
 #add_file -vhdl -lib work "../../trbnet/lattice/machxo3/fifo_9x2k_oreg.vhd"
+#add file -vhdl -lib work "./test/machxo3lf.vhd"
 add_file -vhdl -lib work "../../trbnet/trb_net_std.vhd"
 add_file -vhdl -lib work "../../dirich/code/spi_slave.vhd"
 add_file -vhdl -lib work "../../logicbox/code/sedcheck.vhd"
@@ -18,7 +19,7 @@ add_file -vhdl -lib work "cores/flash.vhd"
 
 #add_file -vhdl -lib work "../../logicbox/cores/flashram.vhd"
 #add_file -vhdl -lib work "cores/efb.vhd"
-#add_file -verilog -lib work "cores/efb_define_def.v"
+add_file -verilog -lib work "../../logicbox/cores/efb_define_def.v"
 add_file -verilog -lib work "../../logicbox/cores/UFM_WB.v"
 
 add_file -vhdl -lib work "thresholds.vhd"
@@ -39,8 +40,10 @@ set_option -job par_1 -add par
 
 #device options
 set_option -technology MACHXO3LF
-set_option -part LCMXO3LF_6900C
-set_option -package BG256C
+#set_option -part LCMXO3LF_6900C
+#set_option -package BG256C
+set_option -part LCMXO3LF_4300E
+set_option -package UWG81
 set_option -speed_grade -5
 set_option -part_companion ""
 
index 2a00fa1052ff987f4bfafd3e22db2f2bce8f57ab..3c4d3748f086397eb31b794c6242f49bdb204422 100644 (file)
@@ -10,12 +10,14 @@ use work.trb_net_std.all;
 \r
 entity thresholds is\r
   port(\r
-    ID     : in  std_logic;\r
-    OUTPUT : out std_logic_vector(15 downto 0);\r
+    DAC_FLAG : in  std_logic; --ID\r
+    OUTPUT   : out std_logic_vector(16 downto 1);\r
     MISO_OUT : out std_logic;\r
     MOSI_IN  : in  std_logic;\r
     SCLK_IN  : in  std_logic;\r
-    CS_IN    : in  std_logic    \r
+    CS_IN    : in  std_logic--;\r
+    --LED           : out std_logic_vector(7 downto 0);\r
+    --DIPSW    : in std_logic_vector(3 downto 0)\r
     );\r
 end entity;\r
 \r
@@ -36,36 +38,48 @@ architecture arch of thresholds is
   signal sed_debug : std_logic_vector(31 downto 0);\r
   signal controlsed_i : std_logic_vector(3 downto 0);\r
  \r
-  signal pwm_data_i : std_logic_vector(15 downto 0);\r
-  signal pwm_write_i : std_logic;\r
-  signal pwm_addr_i  : std_logic_vector(4 downto 0);\r
-  signal pwm_data_ii : std_logic_vector(15 downto 0);\r
-  signal pwm_write_ii : std_logic;\r
-  signal pwm_addr_ii  : std_logic_vector(4 downto 0);\r
+  signal pwm_data_i    : std_logic_vector(15 downto 0):= x"6000";\r
+  signal pwm_write_i   : std_logic;\r
+  signal pwm_addr_i    : std_logic_vector(4 downto 0);\r
+  signal pwm_data_ii   : std_logic_vector(15 downto 0);\r
+  signal pwm_write_ii  : std_logic;\r
+  signal pwm_addr_ii   : std_logic_vector(4 downto 0);\r
+  signal pwm_data_iii  : std_logic_vector(15 downto 0);\r
+  signal pwm_write_iii : std_logic;\r
+  signal pwm_addr_iii  : std_logic_vector(4 downto 0);\r
 \r
 --  signal flashram_reset  : std_logic;\r
   --signal flashram_write_i: std_logic;\r
   signal flashram_data_i : std_logic_vector(7 downto 0);\r
-  signal flashram_data_o : std_logic_vector(7 downto 0);\r
-  signal ram_data : ram_t := (others =>("0000000000000000"));--: std_logic_vector(15 downto 0);\r
+  signal flashram_data_o : std_logic_vector(7 downto 0) := "00000010";\r
+  signal ram_data : ram_t := (others =>("0000000000100001"));--: std_logic_vector(15 downto 0);\r
   --signal ram_data_o : ram_t := (others =>("0000000000000000"));--std_logic_vector(15 downto 0);\r
 \r
-  signal flash_command : std_logic;\r
+  signal flash_command : std_logic := '0';\r
   --signal flash_page    : std_logic_vector(12 downto 0);\r
-  signal flash_go      : std_logic;\r
+  signal flash_go      : std_logic := '1';\r
   signal flash_busy    : std_logic;\r
   signal flash_err     : std_logic;\r
 \r
-  signal compensate_i  : signed(15 downto 0);\r
-  signal pwm_i         : std_logic_vector(15 downto 0);\r
+  signal compensate_i  : signed(15 downto 0) := (others =>'0');\r
+  signal pwm_i         : std_logic_vector(16 downto 1);\r
   signal ufm_bus_ready_in  : std_logic;\r
   signal ufm_bus_ready_out : std_logic;\r
   signal ufm_databyte_counter : unsigned(14 downto 0);\r
   \r
-  signal ram_data_f_spi_addr  : std_logic_vector( 7 downto 0);\r
-  signal ram_data_f_spi_data  : std_logic_vector(15 downto 0);\r
-  signal ram_data_f_spi_write : std_logic;\r
+  signal ram_spi_addr  : std_logic_vector( 7 downto 0);\r
+  signal ram_spi_data  : std_logic_vector(15 downto 0):= "0000111100001111";\r
+  signal ram_spi_write : std_logic;\r
 \r
+  signal show_flash_err : std_logic := '0';\r
+  signal ram_spi_read :std_logic := '0';\r
+  signal flash_temp : std_logic_vector(7 downto 0);\r
+  \r
+  --type state_type is (Start,IDLE,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15);  --type of state machine.\r
+  --signal state: state_type := Start;\r
+  --signal init : std_logic:='1';\r
+  \r
+--   signal temp : std_logic_vector(3 downto 0):= "0000";\r
   \r
   component OSCH\r
     generic (NOM_FREQ: string := "33.25");\r
@@ -112,56 +126,205 @@ THE_SPI : entity work.spi_slave
     \r
     DEBUG     => open\r
   );\r
-    \r
-    \r
-PROC_REGS : process begin\r
-  wait until rising_edge(clk_i);\r
-  bus_ready   <= '0';\r
-  pwm_write_i <= '0';\r
-  flash_go    <= '0';\r
-  ram_data_f_spi_write <= '0';\r
+\r
   \r
-  if pwm_write_ii = '1' then\r
-    pwm_data_i  <= pwm_data_ii;\r
-    pwm_addr_i  <= pwm_addr_ii;\r
-    pwm_write_i <= pwm_write_ii;\r
-    \r
-  elsif bus_read = '1' then\r
-    bus_ready <= '1';\r
-    if spi_addr >= x"10" and spi_addr < x"20" then \r
-       spi_tx_data <= ram_data(to_integer(unsigned(spi_addr)));\r
+-- count : process (clk_i)\r
+-- begin\r
+--   if rising_edge(clk_i) then\r
+--             if temp="1001" then\r
+--                temp<="0000";\r
+--             else\r
+--                temp <= std_logic_vector(unsigned(temp) + 1);\r
+--             end if;\r
+--   end if;\r
+-- \r
+-- end process;\r
+  \r
+-- state_machine :  process (clk_i)\r
+-- begin\r
+-- if rising_edge(clk_i) then\r
+--   pwm_write_i <= '0';\r
+--   --pwm_data_i <= x"6000";\r
+--   case state is\r
+--      when Start =>        --when current state is "s0"\r
+--           if init = '1' then\r
+--              pwm_write_i <= '0';\r
+--              state <= c0;\r
+--           end if;\r
+-- \r
+--      when c0 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00000";\r
+--             state <= c1;\r
+--      \r
+--      when c1 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00001";\r
+--             state <= c2;\r
+--             \r
+--      when c2 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00010";\r
+--             state <= c3;\r
+-- \r
+--      when c3 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00011";\r
+--             state <= c4;\r
+--             \r
+--      when c4 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00100";\r
+--             state <= c5;\r
+--             \r
+--      when c5 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00101";\r
+--             state <= c6;\r
+--             \r
+--      when c6 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00110";\r
+--             state <= c7;\r
+--             \r
+--      when c7 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "00111";\r
+--             state <= c8;\r
+--             \r
+--      when c8 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01000";\r
+--             state <= c9;\r
+--             \r
+--      when c9 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01001";\r
+--             state <= c10;\r
+--             \r
+--      when c10 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01010";\r
+--             state <= c11;\r
+-- \r
+--      when c11 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01011";\r
+--             state <= c12;\r
+--             \r
+--      when c12 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01100";\r
+--             state <= c13;\r
+--             \r
+--      when c13 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01101";\r
+--             state <= c14;\r
+--             \r
+--      when c14 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01110";\r
+--             state <= c15;\r
+--             \r
+--      when c15 => pwm_write_i <= '1';\r
+--             pwm_addr_i <= "01111";\r
+--             init <= '0';\r
+--             state <= IDLE;\r
+--             init <= '0';\r
+--             \r
+--      when IDLE => pwm_write_i <= pwm_write_ii;\r
+--               pwm_addr_i <= pwm_addr_ii;\r
+--               pwm_data_i <= pwm_data_ii;\r
+--               \r
+--   end case;\r
+--   \r
+--   end if;\r
+-- end process;\r
+\r
+\r
+PWM_select : process begin\r
+    wait until rising_edge(clk_i);\r
+  \r
+    pwm_write_i <= '0';\r
+    if pwm_write_ii = '1' then\r
+      pwm_data_i  <= pwm_data_ii;\r
+      pwm_addr_i  <= pwm_addr_ii;\r
+      pwm_write_i <= pwm_write_ii;\r
     else\r
-       case spi_addr is\r
-          when x"30" => spi_tx_data <= std_logic_vector(compensate_i);\r
-          when x"ee" => spi_tx_data <= sed_debug(15 downto 0);\r
-          when x"ef" => spi_tx_data <= sed_debug(31 downto 16);\r
-          when others => null;\r
-       end case;\r
+      pwm_data_i  <= pwm_data_iii;\r
+      pwm_addr_i  <= pwm_addr_iii;\r
+      pwm_write_i <= pwm_write_iii;\r
     end if;\r
+\r
+end process;\r
+\r
     \r
-  elsif bus_write = '1' then\r
-    if spi_addr < x"10" then  -- 0 to 15   0x00 to 0x10  -- write directly to pwm\r
-       if flash_busy = '0' or flash_command = '0' then -- avoid conflict with writing from flash\r
-          pwm_data_i  <= spi_rx_data(15 downto 0);\r
-          pwm_addr_i  <= spi_addr(4 downto 0);\r
-          pwm_write_i <= '1';\r
-       end if;\r
-    elsif spi_addr >= x"10" and spi_addr < x"20" then  -- write to ram\r
-       --ram_data(to_integer(unsigned(spi_addr(3 downto 0)))) <= spi_rx_data; \r
-       ram_data_f_spi_write <= '1';\r
-       ram_data_f_spi_addr  <= spi_addr;\r
-       ram_data_f_spi_data  <= spi_rx_data;\r
-    else\r
-       case spi_addr is\r
-         -- when x"20" => flash_command <= spi_rx_data(0); --read/write to flash;\r
-       --              flash_go      <= '1';\r
-          when x"30" => compensate_i  <= spi_rx_data(15 downto 0);--signed(uart_rx_data(15 downto 0);\r
-          when x"ee" => controlsed_i  <= spi_rx_data(3 downto 0);\r
-      end case;\r
+PROC_REGS : process begin\r
+  wait until rising_edge(clk_i);\r
+  bus_ready     <= '0';\r
+  pwm_write_iii <= '0';\r
+  flash_go      <= '0';\r
+  ram_spi_write <= '0';\r
+  ram_spi_read  <= '0';\r
+  \r
+    if bus_read = '1' then\r
+      bus_ready <= '1';\r
+\r
+      if (spi_addr >= x"10") and (spi_addr < X"20") then\r
+         spi_tx_data <= ram_data(to_integer(unsigned(spi_addr(4 downto 0)))); -- Read RAM\r
+      else\r
+        case spi_addr is\r
+             --when x"10" => spi_tx_data <= reg_spi_o(15 downto  0);\r
+             --when x"11" => spi_tx_data <= reg_spi_o(31 downto 16);\r
+             when x"ee" => spi_tx_data <= sed_debug(15 downto 0);\r
+             when x"ef" => spi_tx_data <= sed_debug(31 downto 16);\r
+  -- \r
+             when others => null;\r
+        end case; \r
+      end if;\r
+    elsif bus_write = '1' then\r
+      if (spi_addr >= x"00") and (spi_addr < x"10") then  -- write directly to PWM\r
+         pwm_data_iii  <= spi_rx_data;\r
+         pwm_addr_iii  <= spi_addr(4 downto 0);\r
+         pwm_write_iii <= '1';\r
+      elsif ( spi_addr >= x"10") and (spi_addr <  x"20") then  -- write to RAM\r
+         ram_spi_data(15 downto  0) <= spi_rx_data;\r
+         ram_spi_write <= '1';\r
+         ram_spi_addr  <= "0000" & spi_addr(3 downto 0);\r
+         pwm_data_iii  <= spi_rx_data;\r
+         pwm_addr_iii  <= spi_addr(4 downto 0);\r
+         pwm_write_iii <= '1';\r
+      else\r
+          case spi_addr is\r
+             when x"20" => flash_command <= '1'; --write to flash;\r
+                           flash_go      <= '1';\r
+             when x"21" => flash_command <= '0'; --read from flash;\r
+                           flash_go      <= '1';\r
+              when x"22" => compensate_i  <= signed(spi_rx_data(15 downto 0));--signed(uart_rx_data(15 downto 0);\r
+              when x"ee" => controlsed_i  <= spi_rx_data(3 downto 0);\r
+             when others => null;\r
+          end case;\r
+      end if;\r
     end if;  \r
-  end if;\r
 end process;\r
 \r
+-- ManSel : process begin\r
+--   wait until rising_edge(clk_i);\r
+--   flash_go    <= '0';\r
+--   ram_spi_write <= '0';\r
+--   --ram_spi_read  <= '0';\r
+--     if pwm_write_ii = '1' then\r
+--       pwm_data_i  <= pwm_data_ii;\r
+--       pwm_addr_i  <= pwm_addr_ii;\r
+--       pwm_write_i <= pwm_write_ii;\r
+--     elsif DIPSW(0) = '0' then\r
+--      case DIPSW(3 downto 1) is\r
+--        when "000" => ram_spi_data(15 downto  0) <= "1100011100111000";\r
+--                  ram_spi_write <= '1';\r
+--                  ram_spi_addr  <= "00000" & DIPSW(3 downto 1);\r
+--        --when "010" => ram_spi_read  <= '1';\r
+--        when "011" => flash_command <= '0'; --read from flash;\r
+--                  flash_go      <= '1';\r
+--        when "100" => flash_command <= '1'; --write to flash;\r
+--                  flash_go      <= '1';\r
+--        when "101" => ram_spi_data(15 downto  0) <= "0000011000101010";\r
+--                  ram_spi_write <= '1';\r
+--                  ram_spi_addr  <= "00000" & DIPSW(3 downto 1);\r
+--        when others => null;\r
+--      end case;\r
+--    else   \r
+--      LED <= not ram_data(to_integer(unsigned(DIPSW(3 downto 1))))(7 downto 0);\r
+--    end if;\r
+--    \r
+-- \r
+-- end process;\r
+\r
 \r
 THE_SED : entity work.sedcheck\r
   port map(\r
@@ -190,154 +353,69 @@ THE_PWM_GEN : entity work.pwm_generator
     );    \r
 \r
 --TODO connect to output according to ID\r
-OUTPUT <= pwm_i;\r
-\r
+process(pwm_i,DAC_FLAG)\r
+  begin\r
+    if DAC_FLAG = '1' then\r
+      OUTPUT <= pwm_i;\r
+    else\r
+      OUTPUT(1)  <= pwm_i(15);\r
+      OUTPUT(2)  <= pwm_i(13);\r
+      OUTPUT(3)  <= pwm_i(8);\r
+      OUTPUT(4)  <= pwm_i(5);\r
+      OUTPUT(5)  <= pwm_i(16);\r
+      OUTPUT(6)  <= pwm_i(4);\r
+      OUTPUT(7)  <= pwm_i(3);\r
+      OUTPUT(8)  <= pwm_i(6);\r
+      OUTPUT(9)  <= pwm_i(2);\r
+      OUTPUT(10) <= pwm_i(1);\r
+      OUTPUT(11) <= pwm_i(7);\r
+      OUTPUT(12) <= pwm_i(9);\r
+      OUTPUT(13) <= pwm_i(14);\r
+      OUTPUT(14) <= pwm_i(12);\r
+      OUTPUT(15) <= pwm_i(10);\r
+      OUTPUT(16) <= pwm_i(11);      \r
+   \r
+    end if;\r
+  end process;  \r
     \r
     \r
 ---------------------------------------------------------------------------\r
 -- Flash Controller\r
 ---------------------------------------------------------------------------      \r
 \r
---THE_UFM : entity work.UFM_control\r
---  generic map(\r
---    NO_DATAPAGES   => 2,\r
---    UFM_STARTPAGE  => "00"&x"00"\r
---    )\r
---  port map(\r
---    CLK           => clk_i,\r
---    CMD           => flash_command,\r
---    GO            => flash_go,\r
---    BUSY          => flash_busy,\r
---    RESET         => '0',\r
---    DATA_IN       => flashram_data_i,\r
---    DATA_OUT              => flashram_data_o,\r
---    DATABYTE_COUNTER => ufm_databyte_counter, --specifies current databyte \r
---    BUS_READY_IN     => ufm_bus_ready_in,\r
---    BUS_READY_OUT    => ufm_bus_ready_out,\r
---    FLASH_ERROR      => flash_err\r
---    );\r
-\r
+THE_UFM : entity work.UFM_control\r
+ generic map(\r
+   NO_DATAPAGES   => 2,\r
+   UFM_STARTPAGE  => "00"&x"00"\r
+   )\r
+ port map(\r
+   CLK              => clk_i,\r
+   CMD              => flash_command,\r
+   GO               => flash_go,\r
+   BUSY            => flash_busy,\r
+   RESET           => '0',\r
+   DATA_IN         => flashram_data_i,\r
+   DATA_OUT        => flashram_data_o,\r
+   DATABYTE_COUNTER => ufm_databyte_counter, --specifies current databyte \r
+   BUS_READY_IN     => ufm_bus_ready_in,\r
+   BUS_READY_OUT    => ufm_bus_ready_out,\r
+   FLASH_ERROR      => flash_err\r
+   );\r
 \r
---PROC_REGS_FLASH: process begin\r
---wait until rising_edge( clk_i );\r
+   \r
+--    PROC_REGS_FLASH: process begin\r
+--    wait until rising_edge( clk_i );\r
 --       ufm_bus_ready_in <= '0';\r
 --       pwm_write_ii     <= '0';\r
---       if flash_command = '0' and ufm_bus_ready_out = '1' then\r
---       -- copy data from UFM to registers\r
---       ufm_bus_ready_in <= '1';\r
---       case to_integer ( ufm_databyte_counter ) is\r
---         when  0 => ram_data( 0)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when  1 => ram_data( 0)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00000";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when  2 => ram_data( 1)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when  3 => ram_data( 1)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00001";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when  4 => ram_data( 2)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when  5 => ram_data( 2)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00010";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when  6 => ram_data( 3)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when  7 => ram_data( 3)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00011";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when  8 => ram_data( 4)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when  9 => ram_data( 4)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00100";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 10 => ram_data( 5)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 11 => ram_data( 5)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00101";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 12 => ram_data( 6)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 13 => ram_data( 6)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00110";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 14 => ram_data( 7)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 15 => ram_data( 7)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "00111";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 16 => ram_data( 8)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 17 => ram_data( 8)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01000";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 18 => ram_data( 9)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 19 => ram_data( 9)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01001";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 20 => ram_data(10)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 21 => ram_data(10)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01010";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 22 => ram_data(11)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 23 => ram_data(11)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01011";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 24 => ram_data(12)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 25 => ram_data(12)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01100";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 26 => ram_data(13)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 27 => ram_data(13)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01101";\r
---                    pwm_data_ii( 15 downto 8)    <= flashram_data_o;\r
---         when 28 => ram_data(14)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 29 => ram_data(14)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01110";\r
---                    pwm_data_ii(15 downto 8)    <= flashram_data_o;\r
---         when 30 => ram_data(15)( 7 downto  0) <= flashram_data_o;\r
---                    pwm_write_ii               <= '0';\r
---                    pwm_data_ii( 7 downto 0)    <= flashram_data_o;\r
---         when 31 => ram_data(15)(15 downto  8) <= flashram_data_o;\r
---                    pwm_write_ii               <= '1';\r
---                    pwm_addr_ii                <= "01111";\r
---                    pwm_data_ii(15 downto 8)    <= flashram_data_o;\r
+--       \r
+--     if flash_command = '0' and ufm_bus_ready_out = '1' then\r
+--       -- copy data from UFM to registers\r
+--       ufm_bus_ready_in <= '1';\r
+--       case to_integer ( ufm_databyte_counter ) is\r
+--         when  0 => ram_temp <= flashram_data_o;\r
+--         when  1 => ram_data(0)(15 downto  0) <= flashram_data_o & ram_temp;\r
+--         when  2 => ram_temp <= flashram_data_o;\r
+--         when  3 => ram_data(1)(15 downto  0) <= flashram_data_o & ram_temp;\r
 --         when others => null;\r
 --       end case ;\r
 --     \r
@@ -345,45 +423,155 @@ OUTPUT <= pwm_i;
 --            -- save data from registers to UFM\r
 --           ufm_bus_ready_in <= '1';\r
 --           case to_integer ( ufm_databyte_counter ) is\r
---         when  0 => flashram_data_i <= ram_data( 0)( 7 downto  0);\r
---         when  1 => flashram_data_i <= ram_data( 0)(15 downto  8);\r
---         when  2 => flashram_data_i <= ram_data( 1)( 7 downto  0);\r
---         when  3 => flashram_data_i <= ram_data( 1)(15 downto  8);\r
---         when  4 => flashram_data_i <= ram_data( 2)( 7 downto  0);\r
---         when  5 => flashram_data_i <= ram_data( 2)(15 downto  8);\r
---         when  6 => flashram_data_i <= ram_data( 3)( 7 downto  0);\r
---         when  7 => flashram_data_i <= ram_data( 3)(15 downto  8);\r
---         when  8 => flashram_data_i <= ram_data( 4)( 7 downto  0);\r
---         when  9 => flashram_data_i <= ram_data( 4)(15 downto  8);\r
---         when 10 => flashram_data_i <= ram_data( 5)( 7 downto  0);\r
---         when 11 => flashram_data_i <= ram_data( 5)(15 downto  8);\r
---         when 12 => flashram_data_i <= ram_data( 6)( 7 downto  0);\r
---         when 13 => flashram_data_i <= ram_data( 6)(15 downto  8);\r
---         when 14 => flashram_data_i <= ram_data( 7)( 7 downto  0);\r
---         when 15 => flashram_data_i <= ram_data( 7)(15 downto  8);\r
---         when 16 => flashram_data_i <= ram_data( 8)( 7 downto  0);\r
---         when 17 => flashram_data_i <= ram_data( 8)(15 downto  8);\r
---         when 18 => flashram_data_i <= ram_data( 9)( 7 downto  0);\r
---         when 19 => flashram_data_i <= ram_data( 9)(15 downto  8);\r
---         when 20 => flashram_data_i <= ram_data(10)( 7 downto  0);\r
---         when 21 => flashram_data_i <= ram_data(10)(15 downto  8);\r
---         when 22 => flashram_data_i <= ram_data(11)( 7 downto  0);\r
---         when 23 => flashram_data_i <= ram_data(11)(15 downto  8);\r
---         when 24 => flashram_data_i <= ram_data(12)( 7 downto  0);\r
---         when 25 => flashram_data_i <= ram_data(12)(15 downto  8);\r
---         when 26 => flashram_data_i <= ram_data(13)( 7 downto  0);\r
---         when 27 => flashram_data_i <= ram_data(13)(15 downto  8);\r
---         when 28 => flashram_data_i <= ram_data(14)( 7 downto  0);\r
---         when 29 => flashram_data_i <= ram_data(14)(15 downto  8);\r
---         when 30 => flashram_data_i <= ram_data(15)( 7 downto  0);\r
---         when 31 => flashram_data_i <= ram_data(15)(15 downto  8);\r
+--         when  0 => flashram_data_i <= ram_data(1)( 7 downto  0);\r
+--         when  1 => flashram_data_i <= ram_data(1)(15 downto  8);\r
+--         --when  2 => flashram_data_i <= ram_data(1)( 7 downto  0);\r
+--         --when  3 => flashram_data_i <= ram_data(1)(15 downto  8);\r
 --         when others => null ;\r
 --           end case ;\r
 --           \r
 --        elsif ram_data_f_spi_write = '1' then\r
---       ram_data(to_integer(unsigned(ram_data_f_spi_addr))) <= ram_data_f_spi_data;\r
+--        ram_data(1) <= reg_spi;\r
+--        elsif ram_data_f_spi_read = '1' then\r
+--        reg_spi_o <= ram_data(1);\r
 --        end if ;\r
--- end process ;\r
+   \r
+   \r
+\r
+PROC_REGS_FLASH: process begin\r
+wait until rising_edge( clk_i );\r
+      ufm_bus_ready_in <= '0';\r
+      pwm_write_ii     <= '0';\r
+      if flash_command = '0' and ufm_bus_ready_out = '1' then\r
+         -- copy data from UFM to registers\r
+         ufm_bus_ready_in <= '1';\r
+         case to_integer ( ufm_databyte_counter ) is\r
+           when  0 => flash_temp   <= flashram_data_o;\r
+           when  1 => ram_data( 0) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00000";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when  2 => flash_temp   <= flashram_data_o;\r
+           when  3 => ram_data( 1) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00001";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when  4 => flash_temp   <= flashram_data_o;\r
+           when  5 => ram_data( 2) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00010";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when  6 => flash_temp   <= flashram_data_o;\r
+           when  7 => ram_data( 3) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00011";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when  8 => flash_temp   <= flashram_data_o;\r
+           when  9 => ram_data( 4) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00100";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 10 => flash_temp   <= flashram_data_o;\r
+           when 11 => ram_data( 5) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00101";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 12 => flash_temp   <= flashram_data_o;\r
+           when 13 => ram_data( 6) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00110";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 14 => flash_temp   <= flashram_data_o;\r
+           when 15 => ram_data( 7) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "00111";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 16 => flash_temp   <= flashram_data_o;\r
+           when 17 => ram_data( 8) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01000";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 18 => flash_temp   <= flashram_data_o;\r
+           when 19 => ram_data( 9) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01001";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 20 => flash_temp   <= flashram_data_o;\r
+           when 21 => ram_data(10) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01010";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 22 => flash_temp   <= flashram_data_o;\r
+           when 23 => ram_data(11) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01011";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 24 => flash_temp   <= flashram_data_o;\r
+           when 25 => ram_data(12) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01100";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 26 => flash_temp   <= flashram_data_o;\r
+           when 27 => ram_data(13) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01101";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 28 => flash_temp   <= flashram_data_o;\r
+           when 29 => ram_data(14) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01110";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when 30 => flash_temp   <= flashram_data_o;\r
+           when 31 => ram_data(15) <= flashram_data_o & flash_temp;\r
+                      pwm_write_ii <= '1';\r
+                      pwm_addr_ii  <= "01111";\r
+                      pwm_data_ii  <= flashram_data_o & flash_temp;\r
+           when others => null;\r
+         end case ;\r
+       \r
+       elsif flash_command = '1' and ufm_bus_ready_out = '1' then\r
+           -- save data from registers to UFM\r
+          ufm_bus_ready_in <= '1';\r
+          case to_integer ( ufm_databyte_counter ) is\r
+           when  0 => flashram_data_i <= ram_data( 0)( 7 downto  0);\r
+           when  1 => flashram_data_i <= ram_data( 0)(15 downto  8);\r
+           when  2 => flashram_data_i <= ram_data( 1)( 7 downto  0);\r
+           when  3 => flashram_data_i <= ram_data( 1)(15 downto  8);\r
+           when  4 => flashram_data_i <= ram_data( 2)( 7 downto  0);\r
+           when  5 => flashram_data_i <= ram_data( 2)(15 downto  8);\r
+           when  6 => flashram_data_i <= ram_data( 3)( 7 downto  0);\r
+           when  7 => flashram_data_i <= ram_data( 3)(15 downto  8);\r
+           when  8 => flashram_data_i <= ram_data( 4)( 7 downto  0);\r
+           when  9 => flashram_data_i <= ram_data( 4)(15 downto  8);\r
+           when 10 => flashram_data_i <= ram_data( 5)( 7 downto  0);\r
+           when 11 => flashram_data_i <= ram_data( 5)(15 downto  8);\r
+           when 12 => flashram_data_i <= ram_data( 6)( 7 downto  0);\r
+           when 13 => flashram_data_i <= ram_data( 6)(15 downto  8);\r
+           when 14 => flashram_data_i <= ram_data( 7)( 7 downto  0);\r
+           when 15 => flashram_data_i <= ram_data( 7)(15 downto  8);\r
+           when 16 => flashram_data_i <= ram_data( 8)( 7 downto  0);\r
+           when 17 => flashram_data_i <= ram_data( 8)(15 downto  8);\r
+           when 18 => flashram_data_i <= ram_data( 9)( 7 downto  0);\r
+           when 19 => flashram_data_i <= ram_data( 9)(15 downto  8);\r
+           when 20 => flashram_data_i <= ram_data(10)( 7 downto  0);\r
+           when 21 => flashram_data_i <= ram_data(10)(15 downto  8);\r
+           when 22 => flashram_data_i <= ram_data(11)( 7 downto  0);\r
+           when 23 => flashram_data_i <= ram_data(11)(15 downto  8);\r
+           when 24 => flashram_data_i <= ram_data(12)( 7 downto  0);\r
+           when 25 => flashram_data_i <= ram_data(12)(15 downto  8);\r
+           when 26 => flashram_data_i <= ram_data(13)( 7 downto  0);\r
+           when 27 => flashram_data_i <= ram_data(13)(15 downto  8);\r
+           when 28 => flashram_data_i <= ram_data(14)( 7 downto  0);\r
+           when 29 => flashram_data_i <= ram_data(14)(15 downto  8);\r
+           when 30 => flashram_data_i <= ram_data(15)( 7 downto  0);\r
+           when 31 => flashram_data_i <= ram_data(15)(15 downto  8);\r
+           when others => null ;\r
+          end case ;\r
+          \r
+       elsif ram_spi_write = '1' then\r
+         ram_data(to_integer(unsigned(ram_spi_addr))) <= ram_spi_data;\r
+       end if ;\r
+end process ;\r
 \r
     \r
     \r