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

Subversion Repositories wb_lpc

[/] [wb_lpc/] [trunk/] [examples/] [lpc_7seg/] [wb_7seg.vhd] - Rev 22

Go to most recent revision | Compare with Previous | Blame | View Log

--------------------------------------------------------------------------------
-- Company: 
-- Engineer:
--
-- Create Date:    10:22:14 12/29/05
-- Design Name:    
-- Module Name:    wb_7seg - Behavioral
-- Project Name:   
-- Target Device:  
-- Tool versions:  
-- Description:
--
-- Dependencies:
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity wb_7seg is
	port(
 
		clk_i		 : in std_logic;
		nrst_i		 : in std_logic;
		wb_adr_i     : in std_logic_vector(24 downto 0);     
		wb_dat_o     : out std_logic_vector(31 downto 0);
    	wb_dat_i     : in std_logic_vector(31 downto 0);
		wb_sel_i     : in std_logic_vector(3 downto 0);
    	wb_we_i      : in std_logic;
		wb_stb_i     : in std_logic;
		wb_cyc_i     : in std_logic;
		wb_ack_o     : out std_logic;
		wb_err_o     : out std_logic;
		wb_int_o     : out std_logic;
 		DISP_SEL	 : inout std_logic_vector(3 downto 0);
		DISP_LED	 : out std_logic_vector(6 downto 0)
 
	);	
 
end wb_7seg;
 
architecture wb_7seg_behav of wb_7seg is
 
component disp_dec
port	(
		disp_dec_in		: in std_logic_vector(3 downto 0);
		disp_dec_out	: out std_logic_vector(6 downto 0)
		);
end component;		
 
 
	signal		data_reg		: std_logic_vector(31 downto 0);
	signal		disp_cnt		: std_logic_vector(6 downto 0);
	signal		disp_data		: std_logic_vector(3 downto 0);
	signal		disp_data_led	: std_logic_vector(6 downto 0);
	signal		disp_pos		: std_logic_vector(3 downto 0);
	constant	DISP_CNT_MAX	: std_logic_vector(6 downto 0) := "1111111";
 
 
 
begin
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		data_reg <= x"10eef00d";
		elsif ( clk_i'event and clk_i = '1' ) then
			if ( wb_stb_i = '1' and wb_we_i = '1' ) then
				data_reg <= wb_dat_i;
			end if;
	end if;
end process;
 
wb_ack_o <= wb_stb_i;
wb_err_o <= '0';
wb_int_o <= '0';
wb_dat_o <= data_reg;
 
 
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		disp_cnt <= ( others => '0' );
		elsif clk_i'event and clk_i = '1' then
			disp_cnt <= disp_cnt + 1;
	end if;
end process;
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		disp_pos <= "0001";
		elsif clk_i'event and clk_i = '1' then
			if disp_cnt = DISP_CNT_MAX then
				disp_pos <=	(
							3 => DISP_SEL(2), 2 => DISP_SEL(1), 
							1 => DISP_SEL(0), 0 => DISP_SEL(3)
							);
			end if;
	end if;
end process;
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		disp_data <= "0000";
		elsif clk_i'event and clk_i = '1' then
			case DISP_SEL is
				when "1000" =>
					disp_data <= data_reg(3 downto 0);
				when "0100" =>
					disp_data <= data_reg(7 downto 4);
				when "0010" =>
					disp_data <= data_reg(11 downto 8);
				when "0001" =>
					disp_data <= data_reg(15 downto 12);
				when others	=>
					disp_data <= (others => '0');
			end case;
	end if;
end process;
 
 
u1: component disp_dec
port map 	(
    		disp_dec_in		=> disp_data,     	
   			disp_dec_out	=> disp_data_led
			);
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		DISP_LED <= (others => '0');
		elsif clk_i'event and clk_i = '1' then
			DISP_LED <= disp_data_led;
	end if;
end process;
 
process (clk_i,nrst_i)
begin
	if nrst_i = '0' then
		DISP_SEL <= (others => '0');
		elsif clk_i'event and clk_i = '1' then
			DISP_SEL <= disp_pos;
	end if;
end process;
 
end wb_7seg_behav;
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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