From 212264ba57fdf56a3d425e3a3c7b5d6953c287b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Sun, 2 Apr 2023 10:43:36 +0200 Subject: [PATCH] chore: specify ranges for all integers Ranges are not needed inside of tesbenches. Resolves #22. --- src/data_link/data_link_layer.vhd | 10 +++--- src/data_link/data_link_pkg.vhd | 28 ++++++++--------- src/data_link/error_handler.vhd | 4 +-- src/data_link/frame_alignment.vhd | 4 +-- src/data_link/ilas_parser.vhd | 48 ++++++++++++++--------------- src/data_link/lane_alignment.vhd | 14 ++++----- src/data_link/link_controller.vhd | 4 +-- src/descrambler.vhd | 2 +- src/jesd204b_link_rx.vhd | 35 ++++++++++----------- src/jesd204b_multipoint_link_rx.vhd | 4 +-- 10 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/data_link/data_link_layer.vhd b/src/data_link/data_link_layer.vhd index d432b39..18da1b6 100644 --- a/src/data_link/data_link_layer.vhd +++ b/src/data_link/data_link_layer.vhd @@ -31,8 +31,8 @@ entity data_link_layer is ERROR_CONFIG : error_handling_config := (2, 0, 5, 5, 5); -- Configuration -- for the error SCRAMBLING : std_logic := '0'; -- Whether scrambling is enabled - F : integer := 2; -- Number of octets in a frame - K : integer := 1); -- Number of frames in a mutliframe + F : integer range 1 to 256 := 2; -- Number of octets in a frame + K : integer range 1 to 32 := 1); -- Number of frames in a mutliframe port ( ci_char_clk : in std_logic; -- Character clock ci_frame_clk : in std_logic; -- Frame clock @@ -42,9 +42,9 @@ entity data_link_layer is do_lane_config : out link_config; -- Configuration of the link -- synchronization - co_lane_ready : out std_logic; -- Received /A/, waiting for lane sync - ci_lane_start : in std_logic; -- Start sending data from lane buffer - ci_request_sync : in std_logic; -- Request resynchronization + co_lane_ready : out std_logic; -- Received /A/, waiting for lane sync + ci_lane_start : in std_logic; -- Start sending data from lane buffer + ci_request_sync : in std_logic; -- Request resynchronization -- input, output co_synced : out std_logic; -- Whether the lane is synced diff --git a/src/data_link/data_link_pkg.vhd b/src/data_link/data_link_pkg.vhd index 9301d9f..3de1250 100644 --- a/src/data_link/data_link_pkg.vhd +++ b/src/data_link/data_link_pkg.vhd @@ -41,7 +41,7 @@ package data_link_pkg is DID : integer range 0 to 255; -- Device identification number F : integer range 1 to 256; -- No. of octets per frame HD : std_logic; -- High density format - JESDV : integer; -- JESD204 version + JESDV : integer range 0 to 7; -- JESD204 version K : integer range 1 to 32; -- No. of frames per multiframe L : integer range 1 to 32; -- No. of lanes per converter LID : integer range 0 to 31; -- Lane identification number @@ -59,19 +59,19 @@ package data_link_pkg is end record link_config; type error_handling_config is record - lane_alignment_realign_after : integer; -- realign after correctly - -- received X alignment - -- characters (0 to disable) - frame_alignment_realign_after : integer; -- realign after correctly - -- received X alignment - -- characters (0 to disable) - tolerate_missing_in_frame : integer; -- How many missing errors to - -- tolerate in a frame (0 to disable) - tolerate_disparity_in_frame : integer; -- How many disparity errors to - -- tolerate in a frame (0 to disable) - tolerate_unexpected_characters_in_frame : integer; -- How many unexpected - -- characters to - -- tolerate in a frame + lane_alignment_realign_after : integer range 0 to 256; -- realign after correctly + -- received X alignment + -- characters (0 to disable) + frame_alignment_realign_after : integer range 0 to 256; -- realign after correctly + -- received X alignment + -- characters (0 to disable) + tolerate_missing_in_frame : integer range 0 to 256; -- How many missing errors to + -- tolerate in a frame (0 to disable) + tolerate_disparity_in_frame : integer range 0 to 256; -- How many disparity errors to + -- tolerate in a frame (0 to disable) + tolerate_unexpected_characters_in_frame : integer range 0 to 256; -- How many unexpected + -- characters to + -- tolerate in a frame end record error_handling_config; end package data_link_pkg; diff --git a/src/data_link/error_handler.vhd b/src/data_link/error_handler.vhd index a8198f5..fe6d8fc 100644 --- a/src/data_link/error_handler.vhd +++ b/src/data_link/error_handler.vhd @@ -15,8 +15,8 @@ use work.data_link_pkg.all; entity error_handler is generic ( CONFIG : error_handling_config; -- Configuration of error handling - F : integer; -- Number of octets in a frame - K : integer); -- Number of frames in a multiframe + F : integer range 1 to 256; -- Number of octets in a frame + K : integer range 1 to 32); -- Number of frames in a multiframe port ( ci_char_clk : in std_logic; -- Character clock ci_reset : in std_logic; -- Reset (asynchronous, diff --git a/src/data_link/frame_alignment.vhd b/src/data_link/frame_alignment.vhd index e9d1e1f..ed9d1fa 100644 --- a/src/data_link/frame_alignment.vhd +++ b/src/data_link/frame_alignment.vhd @@ -78,8 +78,8 @@ architecture a1 of frame_alignment is signal reg_correct_sync_chars : integer := 0; signal reg_known_sync_char_position : integer range 0 to 256; - signal next_octet_index : integer := 0; - signal next_adjusted_octet_index : integer := 0; + signal next_octet_index : integer range 0 to F := 0; + signal next_adjusted_octet_index : integer range 0 to F := 0; begin -- architecture a1 data_buffer: entity work.ring_buffer generic map ( diff --git a/src/data_link/ilas_parser.vhd b/src/data_link/ilas_parser.vhd index ae48acc..61ca948 100644 --- a/src/data_link/ilas_parser.vhd +++ b/src/data_link/ilas_parser.vhd @@ -14,20 +14,20 @@ use ieee.numeric_std.all; entity ilas_parser is generic ( - F : integer; -- Number of octets in a frame - K : integer; -- Number of frames in a multiframe - K_character : std_logic_vector(7 downto 0) := "10111100"; -- Character - -- for syncing - R_character : std_logic_vector(7 downto 0) := "00011100"; -- ILAS - -- multiframe - -- start character - A_character : std_logic_vector(7 downto 0) := "01111100"; -- ILAS - -- multiframe - -- end character - Q_character : std_logic_vector(7 downto 0) := "10011100"; -- ILAS 2nd - -- multiframe - -- 2nd character - multiframes_count : integer := 4); + F : integer range 1 to 256; -- Number of octets in a frame + K : integer range 1 to 32; -- Number of frames in a multiframe + K_character : std_logic_vector(7 downto 0) := "10111100"; -- Character + -- for syncing + R_character : std_logic_vector(7 downto 0) := "00011100"; -- ILAS + -- multiframe + -- start character + A_character : std_logic_vector(7 downto 0) := "01111100"; -- ILAS + -- multiframe + -- end character + Q_character : std_logic_vector(7 downto 0) := "10011100"; -- ILAS 2nd + -- multiframe + -- 2nd character + multiframes_count : integer range 1 to 32 := 4); port ( ci_char_clk : in std_logic; -- Character clock @@ -48,19 +48,19 @@ architecture a1 of ilas_parser is signal octets_in_multiframe : integer range 0 to 8192 := 0; signal link_config_data : std_logic_vector(link_config_length-1 downto 0) := (others => '0'); signal reg_processing_ilas : std_logic := '0'; - signal reg_multiframe_index : integer := 0; - signal reg_octet_index : integer := 0; + signal reg_multiframe_index : integer range 0 to multiframes_count+1 := 0; + signal reg_octet_index : integer range 0 to F*K+5 := 0; signal next_processing_ilas : std_logic := '0'; - signal next_multiframe_index : integer := 0; - signal next_octet_index : integer := 0; + signal next_multiframe_index : integer range 0 to multiframes_count+1 := 0; + signal next_octet_index : integer range 0 to F*K+5 := 0; signal finished : std_logic := '0'; signal err : std_logic := '0'; function getOctetUpIndex ( - octet_index : integer) + octet_index : integer range 0 to F*K+5) return integer is begin -- function getByteUpIndex return link_config_length - 1 - 8 * octet_index; @@ -68,9 +68,9 @@ architecture a1 of ilas_parser is function getDataByIndex ( data : std_logic_vector(link_config_length-1 downto 0); - octet_index : integer; - bit_index : integer; - length : integer) + octet_index : integer range 0 to F*K+5; + bit_index : integer range 0 to 7; + length : integer range 1 to 8) return std_logic_vector is variable up_index : integer; begin -- function getDataByIndex @@ -80,8 +80,8 @@ architecture a1 of ilas_parser is function getBitByIndex ( data : std_logic_vector(link_config_length-1 downto 0); - octet_index : integer; - bit_index : integer) + octet_index : integer range 0 to F*K+5; + bit_index : integer range 0 to 7) return std_logic is variable up_index : integer; begin -- function getBitByIndex diff --git a/src/data_link/lane_alignment.vhd b/src/data_link/lane_alignment.vhd index 8c7a71f..83aa7e4 100644 --- a/src/data_link/lane_alignment.vhd +++ b/src/data_link/lane_alignment.vhd @@ -15,11 +15,11 @@ use work.data_link_pkg.all; entity lane_alignment is generic ( - F : integer; -- Number of octets in a frame - K : integer; -- Number of frames in a multiframe - buffer_size : integer := 256; -- How many octets to keep - R_character : std_logic_vector(7 downto 0) := "00011100"; -- The /R/ character - dummy_character : character_vector := ('1', '0', '0', "10111100", '0')); + F : integer range 1 to 256; -- Number of octets in a frame + K : integer range 1 to 32; -- Number of frames in a multiframe + buffer_size : integer := 256; -- How many octets to keep + R_character : std_logic_vector(7 downto 0) := "00011100"; -- The /R/ character + dummy_character : character_vector := ('1', '0', '0', "10111100", '0')); -- Character to send before the buffer is ready and started port ( @@ -49,8 +49,8 @@ architecture a1 of lane_alignment is signal reg_started : std_logic := '0'; signal reg_error : std_logic := '0'; - signal reg_write_index : integer := 0; - signal reg_read_index : integer := 0; + signal reg_write_index : integer range 0 to buffer_size := 0; + signal reg_read_index : integer range 0 to buffer_size := 0; signal next_write_index : integer range 0 to buffer_size-1 := 0; signal next_read_index : integer range 0 to buffer_size-1 := 0; diff --git a/src/data_link/link_controller.vhd b/src/data_link/link_controller.vhd index ac6766e..c8bc7f7 100644 --- a/src/data_link/link_controller.vhd +++ b/src/data_link/link_controller.vhd @@ -20,8 +20,8 @@ use work.data_link_pkg.all; entity link_controller is generic ( - F : integer; -- Number of octets in a frame - K : integer; -- Number of frames in a multiframe + F : integer range 1 to 256; -- Number of octets in a frame + K : integer range 1 to 32; -- Number of frames in a multiframe K_character : std_logic_vector(7 downto 0) := "10111100"); -- Sync character port ( ci_frame_clk : in std_logic; -- Frame clock diff --git a/src/descrambler.vhd b/src/descrambler.vhd index 1450933..15f075c 100644 --- a/src/descrambler.vhd +++ b/src/descrambler.vhd @@ -4,7 +4,7 @@ use work.data_link_pkg.all; entity descrambler is generic ( - F : integer); + F : integer range 1 to 256); port ( ci_frame_clk : in std_logic; ci_reset : in std_logic; diff --git a/src/jesd204b_link_rx.vhd b/src/jesd204b_link_rx.vhd index 4b53f9f..8d90c88 100644 --- a/src/jesd204b_link_rx.vhd +++ b/src/jesd204b_link_rx.vhd @@ -22,24 +22,24 @@ entity jesd204b_link_rx is -- alignment character Q_character : std_logic_vector(7 downto 0) := "10011100"; -- ILAS 2nd -- frame 2nd character - ADJCNT : integer := 0; + ADJCNT : integer range 0 to 15 := 0; ADJDIR : std_logic := '0'; - BID : integer := 0; - DID : integer := 0; + BID : integer range 0 to 15 := 0; + DID : integer range 0 to 255 := 0; HD : std_logic := '0'; - JESDV : integer := 1; + JESDV : integer range 0 to 7 := 1; PHADJ : std_logic := '0'; - SUBCLASSV : integer := 0; - K : integer; -- Number of frames in a - -- multiframe - CS : integer; -- Number of control bits per sample - M : integer; -- Number of converters - S : integer; -- Number of samples - L : integer; -- Number of lanes - F : integer; -- Number of octets in a frame - CF : integer; -- Number of control words - N : integer; -- Size of a sample - Nn : integer; -- Size of a word (sample + ctrl if CF + SUBCLASSV : integer range 0 to 7 := 0; + K : integer range 1 to 32; -- Number of frames in a + -- multiframe + CS : integer range 0 to 3; -- Number of control bits per sample + M : integer range 1 to 256; -- Number of converters + S : integer range 1 to 32; -- Number of samples + L : integer range 1 to 32; -- Number of lanes + F : integer range 1 to 256; -- Number of octets in a frame + CF : integer range 0 to 32; -- Number of control words + N : integer range 1 to 32; -- Size of a sample + Nn : integer range 1 to 32; -- Size of a word (sample + ctrl if CF ERROR_CONFIG : error_handling_config := (2, 0, 5, 5, 5); SCRAMBLING : std_logic := '0'); port ( @@ -53,8 +53,7 @@ entity jesd204b_link_rx is di_transceiver_data : in lane_input_array(0 to L-1); -- Data from transceivers do_samples : out samples_array(0 to M - 1, 0 to S - 1); - co_frame_state : out frame_state; --- Output samples + co_frame_state : out frame_state; -- Output samples co_correct_data : out std_logic); -- Whether samples are correct user -- data end entity jesd204b_link_rx; @@ -109,9 +108,9 @@ architecture a1 of jesd204b_link_rx is then matches := '0'; end if; + end loop; -- i return matches; - end loop; -- i end function ConfigsMatch; begin -- architecture a1 -- nsynced is active LOW, set '0' if all ready diff --git a/src/jesd204b_multipoint_link_rx.vhd b/src/jesd204b_multipoint_link_rx.vhd index ae597c0..4a453e5 100644 --- a/src/jesd204b_multipoint_link_rx.vhd +++ b/src/jesd204b_multipoint_link_rx.vhd @@ -44,7 +44,7 @@ architecture a1 of jesd204b_multipoint_link_rx is -- purpose: Count lanes before link with index link_index function sumCummulativeLanes ( - link_index : integer) + link_index : integer range 0 to LINKS-1) return integer is variable lanes_count : integer := 0; begin -- function sumCummulativeLanes @@ -59,7 +59,7 @@ architecture a1 of jesd204b_multipoint_link_rx is -- purpose: Count converters before link with index link_index function sumCummulativeConverters ( - link_index : integer) + link_index : integer range 0 to LINKS-1) return integer is variable converters_count : integer := 0; begin -- function sumCummulativeConverters -- 2.48.1