⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 def_pkg.vhd

📁 将VHDL源文件中提取常量转换成C/C++的头文件。用于VHDL的固件和主机程序间的同步
💻 VHD
字号:
----------------------------------------------------------------------------------------------
--
--                                                             
--                                Parameter Definitions    
--                                                             
--
----------------------------------------------------------------------------------------------
--
--
-- ID: $Id$
--

Library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;

use work.common.all;

package definition is
	
	constant STR_WB_NULL : std_logic_vector(7 downto 0) := X"00"; -- null operation
	--
	--
	-- Parameters
	--
	--
	
  constant PAR_PIXEL_WIDTH       : integer := 16;

  constant PAR_SA_ADDR_WIDTH   : integer := 11;
  constant PAR_SA_POS_WIDTH    : integer := 6;
	constant PAR_SA_INIT_WIDTH 	: integer := 1;
  constant PAR_DKBK_WIDTH      : integer := 16;
  constant PAR_FLAT_WIDTH      : integer := 16;
  constant PAR_WEIGHT_WIDTH    : integer := 17;
	
  constant PAR_THRESHOLD_WIDTH : integer := 16;
	
	constant PAR_SUBAPT_WIDTH : integer := 32; -- width of the SA result data
	
	--
	-- Pixel calibration record
	--
  constant PAR_RECORD_WIDTH    : integer := PAR_SA_ADDR_WIDTH + PAR_SA_POS_WIDTH + PAR_SA_INIT_WIDTH
		+ PAR_DKBK_WIDTH + PAR_FLAT_WIDTH + PAR_WEIGHT_WIDTH;

  -- pixel parameter record
  -- (LSB)
  -- PAR_DKBK_WIDTH
  -- PAR_FLAT_WIDTH
  -- PAR_WEIGHT_WIDTH
  -- PAR_SA_POS_WIDTH
  -- PAR_SA_ADDR_WIDTH
  -- (MSB)
  constant PAR_DKBK_BIT    : integer := 0;
  constant PAR_FLAT_BIT    : integer := PAR_DKBK_BIT + PAR_DKBK_WIDTH;
  constant PAR_WEIGHT_BIT  : integer := PAR_FLAT_BIT + PAR_FLAT_WIDTH;
	constant PAR_SA_INIT_BIT : integer := PAR_WEIGHT_BIT + PAR_WEIGHT_WIDTH;
  constant PAR_SA_POS_BIT  : integer := PAR_SA_INIT_BIT + PAR_SA_INIT_WIDTH;
  constant PAR_SA_ADDR_BIT : integer := PAR_SA_POS_BIT + PAR_SA_POS_WIDTH;		

	constant PAR_BANK_BIT : integer := 24; -- FIXME: the lower bit in the UD record of the PAR_HID

	-- 
  -- Stream header constants
	--
  constant STR_DATA_WIDTH : integer := 32;      -- width of the stream data
  constant STR_HDR_DATA_WIDTH : integer := 32;  -- width of the stream header
  
  --	Header type	1: Raw CCD, 2: Semi-calibrated CCD, 3: Full-calibrated CCD, 4: Slopes, 8: Pixel calibration map
  constant STR_HDR_TYPE_BIT : integer := 0;
  constant STR_HDR_TYPE_WIDTH : integer := 4;

  constant STR_HDR_LEN_BIT : integer := 4;
  constant STR_HDR_LEN_WIDTH : integer := 8;
  
  constant STR_HDR_DW_BIT : integer := 12;
  constant STR_HDR_DW_WIDTH : integer := 8;
  
  constant STR_HDR_MUX_BIT : integer := 20;
  constant STR_HDR_MUX_WIDTH : integer := 4;
  
  constant STR_HDR_UD_BIT : integer := 24;
  constant STR_HDR_UD_WIDTH : integer := 8;
	
	-- packet header
  --constant PKT_HDR_TYPE_BIT : integer := 0; -- the bits should always be STR_TYPE_PACKET
  --constant PKT_HDR_TYPE_WIDTH : integer := 4; 

  constant PKT_HDR_LEN_BIT : integer := 4;
  constant PKT_HDR_LEN_WIDTH : integer := 8;
  
  constant PKT_HDR_SID_BIT : integer := 12;
  constant PKT_HDR_SID_WIDTH : integer := 4;
  
  constant PKT_HDR_PLEN_BIT : integer := 16;
  constant PKT_HDR_PLEN_WIDTH : integer := 12;
  
  constant PKT_HDR_RESET : integer := 30;
	constant PKT_HDR_STOP : integer := 31;
	
  -- Stream types
  constant STR_TYPE_RAWCCD : integer := 1;
  constant STR_TYPE_RAWFE : integer := 2;
  constant STR_TYPE_SEMICALPIX : integer := 3;
  constant STR_TYPE_CALPIX : integer := 4;
	constant STR_TYPE_CALPAR : integer := 8;
  constant STR_TYPE_SYNCSTR : integer := 9;
	constant STR_TYPE_SUBAPT : integer := 10; 
  constant STR_TYPE_SLOPE : integer := 11;
  constant STR_TYPE_FLUX : integer := 12;
	
	constant STR_TYPE_WB : integer := 13;
	constant STR_TYPE_OOB_PACKET : integer := 14;
	constant STR_TYPE_PACKET : integer := 15;
	
	--
	--
	-- Interface Streams
	--
	--
	
	--
	-- CCD Pixels
	--
	
	--
	-- Frontend Pixels
	--
	constant STR_FPIX_HDR_LENGTH : integer := 3; -- ID, SN, SRC_ID
	
	constant STR_FPIX_PIXEL_WIDTH : integer := PAR_PIXEL_WIDTH;
	
	constant STR_FPIX_DATA_WIDTH : integer := max(STR_DATA_WIDTH, STR_FPIX_PIXEL_WIDTH); -- single rate pixel stream
	
	--
	-- Calibrated Pixels
	--
	constant STR_CPIX_HDR_LENGTH : integer := 3;  -- ID, SN, PAR_ID
	
	constant STR_CPIX_PIXEL_WIDTH : integer := PAR_PIXEL_WIDTH;
	constant STR_CPIX_SA_ADDR_WIDTH : integer := PAR_SA_ADDR_WIDTH;
	constant STR_CPIX_SA_POS_WIDTH : integer := PAR_SA_POS_WIDTH;
	constant STR_CPIX_SA_INIT_WIDTH : integer := PAR_SA_INIT_WIDTH;
	
	constant STR_CPIX_DATA_WIDTH : integer := max(STR_DATA_WIDTH, 
		STR_CPIX_PIXEL_WIDTH + STR_CPIX_SA_ADDR_WIDTH + STR_CPIX_SA_POS_WIDTH + STR_CPIX_SA_INIT_WIDTH);
	
	-- result data format (record)
  -- (LSB)
  -- PIXEL
  -- SA_POS
  -- SA_ADDR
  -- (MSB)
  constant STR_CPIX_PIX_BIT     : integer := 0;
  constant STR_CPIX_SA_INIT_BIT  : integer := STR_CPIX_PIX_BIT + STR_CPIX_PIXEL_WIDTH;
  constant STR_CPIX_SA_POS_BIT  : integer := STR_CPIX_SA_INIT_BIT + STR_CPIX_SA_INIT_WIDTH;
  constant STR_CPIX_SA_ADDR_BIT : integer := STR_CPIX_SA_POS_BIT + STR_CPIX_SA_POS_WIDTH;
	
	--
	-- Calibration parameters
	--
	constant STR_CPAR_HDR_LENGTH : integer := 1; -- ID
	
	--
	-- Subapture/slopes
	--
	constant STR_SUBAPT_HDR_LENGTH : integer := 3; -- ID, SN, PAR_ID,
	-- stream format
	-- (First)
	-- Subapture info
	-- X slope
	-- Y slope
	-- Flux
	-- ...
	constant STR_SUBAPT_DATA_WIDTH : integer := max(PAR_SUBAPT_WIDTH, 32);

	-- SA info DWORD
	-- (LSB)
	-- SA address
	-- (MSB)
	constant STR_SUBAPT_INFO_SA_ADDR_WIDTH : integer := STR_CPIX_SA_ADDR_WIDTH;
	constant STR_SUBAPT_INFO_SA_ADDR_BIT : integer := 0;
	constant STR_SUBAPT_INFO_SA_DBZ_BIT : integer := 31; -- divided by zero
	
	
	--
	--  Slopes
	--
	constant STR_SLOPE_HDR_LENGTH : integer := 3; -- ID, SN, PAR_ID,
	-- stream format
	-- (First)
	-- X slope
	-- Y slope
	-- ...
	constant STR_SLOPE_DATA_WIDTH : integer := 32;

	--
	--  Flux
	--
	constant STR_FLUX_HDR_LENGTH : integer := 3; -- ID, SN, PAR_ID,
	-- stream format
	-- (First)
	-- Flux
	-- ...
	constant STR_FLUX_DATA_WIDTH : integer := 32;
	
	--
	-- Wishbone sub types
	--
	constant STR_WB_NULL : std_logic_vector(7 downto 0) := X"00"; -- null operation
	constant STR_WB_NOP : std_logic_vector(7 downto 0) := X"71"; -- no operation
	constant STR_WB_RST : std_logic_vector(7 downto 0) := X"72"; -- reset the wishbone bus
	constant STR_WB_CTRL : std_logic_vector(7 downto 0) := X"73"; -- send the control data to the bridge
	constant STR_WB_IRQ : std_logic_vector(7 downto 0) := X"74"; -- irq from the bus
	constant STR_WB_READ : std_logic_vector(7 downto 0) := X"45"; -- write the data to WB
	constant STR_WB_WRITE : std_logic_vector(7 downto 0) := X"66"; -- read the data from wishbone bus
	constant STR_WB_RET : std_logic_vector(7 downto 0) := X"27";
	constant STR_WB_ACK : std_logic_vector(7 downto 0) := X"38";
	
end;

package body definition is


end package body;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -