📄 packforsim.vhd
字号:
-------------------------------------------------------------------------------
-- 文件名: PackForSimA.vhd
-- Copyright (c) 2002-2003 SVA-Radar信息产品部
-- 创建人: 马骏
-- 日 期: 3.1
-- 修改人:
-- 日 期:
-- 描 述: 雷达模拟器v1.0目标产生模块参数定义
-- 版 本: 1.0
-------------------------------------------------------------------------------
-- Package File Template
--
-- Purpose: This package defines supplemental types, subtypes,
-- constants, and functions
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package PackForSim is
-- type <new_type> is
-- record
-- <type_name> : std_logic_vector( 7 downto 0);
-- <type_name> : std_logic;
-- end record;
---- Declare constants
-- constant <constant_name> : time := <time_unit> ns;
-- constant <constant_name> : integer := <value>;
---- Declare functions and procedure
-- function <function_name> (signal <signal_name> : in <type_declaration>) return <type_declaration>;
-- procedure <procedure_name> (<type_declaration> <constant_name> : in <type_declaration>);
--输入时钟频率为38.8395MHz
constant Crystal : integer := 38839510;
constant OneScan : integer := 97098775; --Crystal*2.5;
--ClkTrig = CLK_IN = 38.83951MHz时
constant TrigWidthCnt : integer := 58; --共1.5us
constant Trig1k8Cnt : integer := 21578; --21578分频得到1.8k的触发脉冲
constant Trig1k2Cnt : integer := 32366;
constant Trig0k6Cnt : integer := 64733;
constant Trig1k3Cnt : integer := 29877;
constant Trig0k65Cnt : integer := 59753;
constant TrigPeriod1k8 : integer := 21578; --Crystal/1800
constant TrigPeriod1k2 : integer := 32366; --Crystal/1200
constant TrigPeriod0k6 : integer := 64733; --Crystal/600
constant TrigPeriod1k3 : integer := 29877; --Crystal/1300
constant TrigPeriod0k65 : integer := 59753; --Crystal/650
--ClkAzip = CLK_IN = 38.83951MHz时
--constant AzipWidthCnt : integer := 233; --方位脉宽为6us
constant AzipWidthCnt : integer := 23300; --方位脉宽为600us
constant Azip216Cnt : integer := 499531; --38.83951Mhz/(216/2.5)
constant Azip360Cnt : integer := 269719;
constant Azip1080Cnt : integer := 89906;
constant Azip90Cnt : integer := 1078872;
--ClkShf = CLK_IN = 38.83951MHz时
constant ShfWidthCnt : integer := 388; --船首标脉宽为10us
constant ShfCnt : integer := 97098775; --38.83951Mhz/(1/2.5)
constant Range5Nm : integer := 2397; --5海里处的一个固定距标圈的距离量化单元数,(5海里x1852)/(150/38.83951)
constant LineHalfWidth : integer := 5; --固定距标圈的线宽
--ClkTrgt频率为38.83951MHz
constant FixTrgt05vRng : integer := 1918; --0.5v固定目标中心的距离量化单元数,以ClkTrgt计数,(4海里x1852)/(150/38.83951)
constant FixTrgt3vRng : integer := 959; --3v固定目标中心的距离量化单元数,以ClkTrgt计数,2海里
constant FixTrgt05vHalfLength : integer := 52; --0.5v固定目标长度计数的一半,长度为400m
constant FixTrgt3vHalfLength : integer := 52; --3v固定目标长度计数的一半
constant MovTrgtHalfLength : integer := 52; --运动目标长度计数的一半
--4个固定目标中心的方位量化单元数,以ClkTrgt计数
constant FixTrgt1Azip : integer := 12137347; --38.83951x2.5x(45/360), pi/4
constant FixTrgt2Azip : integer := 36412041; --38.83951x2.5x(135/360), 3pi/4
constant FixTrgt3Azip : integer := 60686734; --38.83951x2.5x(225/360), 5pi/4
constant FixTrgt4Azip : integer := 84961428; --38.83951x2.5x(315/360), 7pi/4
constant MaxTrgtBeamNum : integer := 1000; --最大的目标波束数为1000,即最大的目标能够收到1000个回波
--constant FixTrgtBeamHalfNum : integer := 15; --固定目标的方位使能长度是30乘以一个触发周期内的时钟脉冲数
--constant MovTrgtBeamHalfNum : integer := 15; --运动目标的方位使能长度是30乘以一个触发周期内的时钟脉冲数
constant FixTrgtBeamHalfNum : integer := 10; --固定目标的方位使能长度是10乘以一个触发周期内的时钟脉冲数
constant MovTrgtBeamHalfNum : integer := 10; --运动目标的方位使能长度是10乘以一个触发周期内的时钟脉冲数
--2个径向运动目标中心的方位量化单元数,以ClkTrgt计数
constant MovTrgt1Azipa : integer := 0; --运动目标1在本船前方时
constant MovTrgt1Azipb : integer := 48549388; --38.83951x2.5x(180/360), pi,运动目标1在本船后方
constant MovTrgt3Azipa : integer := 12137347; --38.83951x2.5x(45/360), pi/4,运动目标3尚未通过本船位置
constant MovTrgt3Azipb : integer := 60686734; --38.83951x2.5x(225/360), 5pi/4,运动目标3已经越过本船位置
--constant MovTrgt2AzipOrg : integer := 12137347; --38.83951x2.5x(45/360), pi/4
--运动目标1走出量程所需的天线周期数
--(8海里/20节)*3600秒/2.5秒 = 576,
--(48海里/20节)*3600秒/2.5秒 = 3456,
--(40海里/20节)*3600秒/2.5秒 = 2880,
--(8海里/21节)*3600秒/2.5秒 = 549,
--(40海里/21节)*3600秒/2.5秒 = 2743
constant MovTrgt1OutRng : integer := 549 + 2743;
constant MovTrgt1Pass : integer := 549; --运动目标1经过本船位置时的天线周期计数
constant MovTrgt3OutRng : integer := 549 + 2743;
constant MovTrgt3Pass : integer := 549; --运动目标3经过本船位置时的天线周期计数
--雷达量程量化单元数
--(40海里x1852)/(150/38.83951) = 19182
--采用最大频率(1800Hz)的触发脉冲时最大的测距范围
--是45海里左右(相邻两触发脉冲之间的原始时钟数目有限),
--因此最大量程定为40海里
--constant RadarRng : integer := 23018; --雷达量程量化单元数,(48海里x1852)/(150/38.83951)
constant RadarRng : integer := 19182; --雷达量程定为40海里
constant MovTrgt1RngOrg : integer := 3836; --运动目标1中心的起始距离量化单元数,8海里
constant MovTrgt1RngDelta : integer := 7; --运动目标1每个天线周期的距离量化增量,这样得到的速度为21节
constant MovTrgt3RngOrg : integer := 3836; --运动目标3中心的起始距离量化单元数,8海里
constant MovTrgt3RngDelta : integer := 7; --运动目标3每个天线周期的距离量化增量,这样得到的速度为21节
--按键去抖动延时
--constant KeyDelay : integer := 38839510; --1s
constant KeyDelay : integer := 388395; --10ms
--八段显示译码,共阳
constant Code0 : std_logic_vector(6 downto 0) := "1000000";
constant Code1 : std_logic_vector(6 downto 0) := "1111001";
constant Code2 : std_logic_vector(6 downto 0) := "0100100";
constant Code3 : std_logic_vector(6 downto 0) := "0110000";
constant Code5 : std_logic_vector(6 downto 0) := "0010010";
constant Code6 : std_logic_vector(6 downto 0) := "0000010";
constant Code8 : std_logic_vector(6 downto 0) := "0000000";
constant Code9 : std_logic_vector(6 downto 0) := "0010000";
constant CodeNull : std_logic_vector(6 downto 0) := "1111111";
--两组数码管,每组各4个
type Disp is record
Digit3 : std_logic_vector(6 downto 0);
Digit2 : std_logic_vector(6 downto 0);
Digit1 : std_logic_vector(6 downto 0);
Digit0 : std_logic_vector(6 downto 0);
end record;
constant TrigDisp1k3 : Disp := (Code1, Code3, Code0, Code0); --1300
constant TrigDisp0k65 : Disp := (CodeNull, Code6, Code5, Code0); --650
constant TrigDisp1k8 : Disp := (Code1, Code8, Code0, Code0); --1800
constant TrigDisp1k2 : Disp := (Code1, Code2, Code0, Code0); --1200
constant TrigDisp0k6 : Disp := (CodeNull, Code6, Code0, Code0); --600
constant AzipDisp216 : Disp := (CodeNull, Code2, Code1, Code6); --216
constant AzipDisp360 : Disp := (CodeNull, Code3, Code6, Code0); --360
constant AzipDisp1080 : Disp := (Code1, Code0, Code8, Code0); --1080
end PackForSim;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -