spartan3e: reset sollte man mindestens mit high verbinden - geht jetzt :)
authorBernhard Urban <lewurm@gmail.com>
Tue, 18 May 2010 18:47:26 +0000 (20:47 +0200)
committerBernhard Urban <lewurm@gmail.com>
Tue, 18 May 2010 18:47:26 +0000 (20:47 +0200)
ausserdem: das dcm (ist gleich pll in xilinx-sprache) modul hat anscheind auch
nicht ganz gepasst. da die clk-source aber eh 50MHz sind und 25MHz fuer das
vga-modul benoetigt werden, ist das einfach in einem taktteiler zu realisieren

spartan3e/Makefile
spartan3e/spartan3e.ucf
src/calc_s3e.vhd
src/clk_vga_s3e.vhd [new file with mode: 0644]
src/dcm_s3e.vhd [deleted file]

index 9a8725c0ad138556846855b466e1ddf6fc845abc..1b09c257c2d5793aa00f6519914042d2a97246b4 100644 (file)
@@ -3,8 +3,8 @@ SHELL := bash
 VHDL_DIR := ../src
 PROJ_VHDL = alu.vhd \
        textmode_vga/spartan3e_starterkit/textmode_vga_platform_dependent_pkg.vhd \
+       clk_vga_s3e.vhd \
        calc_s3e.vhd \
-       dcm_s3e.vhd \
        display.vhd \
        history.vhd \
        math_pkg.vhd \
index 64826bb17b23b1acd1230d2e5db158aad2257794..f87cd5543f4ee1e26730e430f7efda61f5354b8a 100644 (file)
@@ -15,9 +15,9 @@
 #NET "BTN_SOUTH" LOC = "K17" | IOSTANDARD = LVTTL | PULLDOWN ;
 #NET "BTN_WEST" LOC = "D18" | IOSTANDARD = LVTTL | PULLDOWN ;
 # ==== Clock inputs (CLK) ====
-NET "sys_clk_real" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
+NET "CLK_50MHZ" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
 # Define clock period for 50 MHz oscillator (40%/60% duty-cycle)
-NET "sys_clk_real" PERIOD = 20 ns HIGH 40 %;
+NET "CLK_50MHZ" PERIOD = 20 ns HIGH 40 %;
 #NET "CLK_AUX" LOC = "B8" | IOSTANDARD = LVCMOS33 ;
 #NET "CLK_SMA" LOC = "A10" | IOSTANDARD = LVCMOS33 ;
 # ==== Digital-to-Analog Converter (DAC) ====
@@ -274,6 +274,6 @@ NET "vsync_n" LOC = "F14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ;
 #NET "XC_TRIG" LOC = "R17" | IOSTANDARD = LVCMOS33 ;
 #NET "XC_GCK0" LOC = "H16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
 #NET "GCLK10" LOC = "C9" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
-NET "sys_clk_real" TNM_NET = "sys_clk_real";
+NET "CLK_50MHZ" TNM_NET = "CLK_50MHZ";
 #NET "clk_reg1" TNM_NET = "clk_reg1";
 #TIMESPEC "TS_clk_reg1" = PERIOD "clk_reg1" 40 ns HIGH 50 %;
index 636128fc8555d58528f94b50f1821b1bca516659..6ff9ea2cf63e0c3bdc53c066898d5c36ea675efb 100644 (file)
@@ -9,8 +9,8 @@ use work.ps2_keyboard_controller_pkg.all;
 
 entity calc is
        port (
-               sys_clk_real : in std_logic;
-               sys_res_n : in std_logic;
+               CLK_50MHZ : in std_logic;
+               -- sys_res_n : in std_logic;
                -- btnA
                -- TODO: pins
                -- rs232
@@ -31,8 +31,6 @@ entity calc is
 end entity calc;
 
 architecture top of calc is
-       -- clk
-       signal sys_clk : std_logic;
        -- ps/2
        signal new_data : std_logic;
        signal data : std_logic_vector(7 downto 0);
@@ -53,18 +51,6 @@ architecture top of calc is
 
        -- tmp: history<>scanner
        signal do_it, finished : std_logic;
-
-       COMPONENT dcm_s3e
-       PORT(
-               CLKIN_IN : IN std_logic;
-               RST_IN : IN std_logic;
-               CLKIN_IBUFG_OUT : OUT std_logic;
-               CLK0_OUT : OUT std_logic;
-               CLK0_OUT1 : OUT std_logic;
-               LOCKED_OUT : OUT std_logic
-               );
-       END COMPONENT;
-
 begin
        led0 <= '0';
        led1 <= '1';
@@ -77,13 +63,13 @@ begin
                SYNC_STAGES => 2
        )
        port map (
-               sys_clk => sys_clk,
-               sys_res_n => sys_res_n,
+               sys_clk => CLK_50MHZ,
+               sys_res_n => '1',
                command => command,
                command_data => command_data,
                free => free,
                vga_clk => vga_clk,
-               vga_res_n => sys_res_n,
+               vga_res_n => '1',
                vsync_n => vsync_n,
                hsync_n => hsync_n,
                r => r,
@@ -92,20 +78,17 @@ begin
        );
 
        -- pll fuer vga
-       dcm_s3e_inst : dcm_s3e PORT MAP(
-               CLKIN_IN => sys_clk_real,
-               RST_IN => sys_res_n,
-               CLKIN_IBUFG_OUT => sys_clk,
-               CLK0_OUT => vga_clk,
-               CLK0_OUT1 => open,
-               LOCKED_OUT => open
+       clk_vga_s3e_inst : entity work.clk_vga_s3e(beh)
+       port map (
+               clk50 => CLK_50MHZ,
+               clk25 => vga_clk
        );
 
        -- display
        display_inst : entity work.display(beh)
        port map (
-               sys_clk => sys_clk,
-               sys_res_n => sys_res_n,
+               sys_clk => CLK_50MHZ,
+               sys_res_n => '1',
                -- history
                d_new_eingabe => d_new_eingabe,
                d_new_result => d_new_result,
@@ -123,8 +106,8 @@ begin
        -- history
        history_inst : entity work.history(beh)
        port map (
-               sys_clk => sys_clk,
-               sys_res_n => sys_res_n,
+               sys_clk => CLK_50MHZ,
+               sys_res_n => '1',
                -- scanner
                s_char => s_char,
                s_take => s_take,
@@ -146,8 +129,8 @@ begin
        -- scanner
        scanner_inst : entity work.scanner(beh)
        port map (
-               sys_clk => sys_clk,
-               sys_res_n => sys_res_n,
+               sys_clk => CLK_50MHZ,
+               sys_res_n => '1',
                -- ps/2
                new_data => new_data,
                data => data,
@@ -168,8 +151,8 @@ begin
                SYNC_STAGES => 2
        )
        port map (
-               sys_clk => sys_clk,
-               sys_res_n => sys_res_n,
+               sys_clk => CLK_50MHZ,
+               sys_res_n => '1',
                -- scanner
                new_data => new_data,
                data => data,
diff --git a/src/clk_vga_s3e.vhd b/src/clk_vga_s3e.vhd
new file mode 100644 (file)
index 0000000..e84accd
--- /dev/null
@@ -0,0 +1,23 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity clk_vga_s3e is
+       port (
+               clk50 : in std_logic;
+               clk25 : out std_logic
+       );
+end clk_vga_s3e;
+
+architecture beh of clk_vga_s3e is
+       signal clk25_int : std_logic;
+begin
+       clk25 <= clk25_int;
+       process (clk50)
+       begin
+               if clk50'event and clk50='1' then
+                       clk25_int <= not clk25_int;
+               end if;
+       end process;
+end architecture beh;
+
diff --git a/src/dcm_s3e.vhd b/src/dcm_s3e.vhd
deleted file mode 100644 (file)
index 7787f9e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
--- Module dcm_s3e
--- Generated by Xilinx Architecture Wizard
--- Written for synthesis tool: XST
-
-library ieee;
-use ieee.std_logic_1164.ALL;
-use ieee.numeric_std.ALL;
-library UNISIM;
-use UNISIM.Vcomponents.ALL;
-
-entity dcm_s3e is
-   port ( CLKIN_IN        : in    std_logic; 
-          RST_IN          : in    std_logic; 
-          CLKIN_IBUFG_OUT : out   std_logic; 
-          CLK0_OUT        : out   std_logic; 
-          CLK0_OUT1       : out   std_logic; 
-          LOCKED_OUT      : out   std_logic);
-end dcm_s3e;
-
-architecture BEHAVIORAL of dcm_s3e is
-   signal CLKFB_IN        : std_logic;
-   signal CLKIN_IBUFG     : std_logic;
-   signal CLK0_BUF        : std_logic;
-   signal GND_BIT         : std_logic;
-begin
-   GND_BIT <= '0';
-   CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
-   CLK0_OUT <= CLKFB_IN;
-   CLKIN_IBUFG_INST : IBUFG
-      port map (I=>CLKIN_IN,
-                O=>CLKIN_IBUFG);
-   
-   CLK0_BUFG_INST : BUFG
-      port map (I=>CLK0_BUF,
-                O=>CLKFB_IN);
-   
-   CLK0_BUFG_INST1 : BUFG
-      port map (I=>CLK0_BUF,
-                O=>CLK0_OUT1);
-   
-   DCM_SP_INST : DCM_SP
-   generic map( CLK_FEEDBACK => "1X",
-            CLKDV_DIVIDE => 2.0,
-            CLKFX_DIVIDE => 1,
-            CLKFX_MULTIPLY => 4,
-            CLKIN_DIVIDE_BY_2 => FALSE,
-            CLKIN_PERIOD => 20.000,
-            CLKOUT_PHASE_SHIFT => "NONE",
-            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
-            DFS_FREQUENCY_MODE => "LOW",
-            DLL_FREQUENCY_MODE => "LOW",
-            DUTY_CYCLE_CORRECTION => TRUE,
-            FACTORY_JF => x"C080",
-            PHASE_SHIFT => 0,
-            STARTUP_WAIT => FALSE)
-      port map (CLKFB=>CLKFB_IN,
-                CLKIN=>CLKIN_IBUFG,
-                DSSEN=>GND_BIT,
-                PSCLK=>GND_BIT,
-                PSEN=>GND_BIT,
-                PSINCDEC=>GND_BIT,
-                RST=>RST_IN,
-                CLKDV=>open,
-                CLKFX=>open,
-                CLKFX180=>open,
-                CLK0=>CLK0_BUF,
-                CLK2X=>open,
-                CLK2X180=>open,
-                CLK90=>open,
-                CLK180=>open,
-                CLK270=>open,
-                LOCKED=>LOCKED_OUT,
-                PSDONE=>open,
-                STATUS=>open);
-   
-end BEHAVIORAL;
-