亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vi_interface.vhd

?? 一個完整的viterbi譯碼程序和測試的程序
?? VHD
字號:
-------------------------------------------------------------------------
-------------------------------------------------------------------------
--
-- Revision Control Information
--
-- Description	:  This package contains all the functions that are required
--                 at the interface of the Viterbi entities
--
-- ALTERA Proprietary
-- Copyright 2000 (c) Altera Corporation
-- All rights reserved
--
-------------------------------------------------------------------------
-------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

package  vi_interface  is

	constant NO_WARNING: BOOLEAN := FALSE; -- default to emit warnings

	type NATURAL_ARRAY is array(NATURAL RANGE <>) of NATURAL;
	type NATURAL_2D_ARRAY is array(NATURAL RANGE <>, NATURAL RANGE <>) of NATURAL;
	type Std_Logic_3D_CUBE is array(NATURAL RANGE <>, NATURAL RANGE <>, NATURAL RANGE <>) of Std_Logic;

	function LOG2_ceil_table(x: in NATURAL) return NATURAL;
	function Ceil_DIV(a, d: in NATURAL) return NATURAL;
	function check_base(item : character; base : STRING) return BOOLEAN;
	function Convert_str_nat(pol_value, base : STRING) return NATURAL;
	function Get_ncodes(n: STRING) return NATURAL;
	function Get_n_list(n: STRING; ncodes : NATURAL) return NATURAL_ARRAY;
	function Get_modes_list(modes: STRING; ncodes : NATURAL) return NATURAL_ARRAY;
	function Get_n_max(n : STRING) return NATURAL;
	function Get_n_max_modes(n, m : STRING) return NATURAL;
	function Get_rr_size(n, softbits: in NATURAL; punctured_rate : in STRING) return NATURAL;
	function LOG2_ceil_avoid_one(n : in NATURAL) return NATURAL;
	function mul(a, b: in NATURAL) return NATURAL;

end vi_interface;


package body  vi_interface  is


function LOG2_ceil_table(x: in NATURAL) return NATURAL is

  variable result : NATURAL;

begin
	
	if x=1 then
	  result:=0;
	elsif x=2 then
	  result:=1;
	elsif x>2 and x<5 then
	  result:=2;
	elsif x>4 and x<9 then
	  result:=3;
	elsif x>8 and x<17 then
	  result:=4;
	elsif x>16 and x<33 then
	  result:=5;
	elsif x>32 and x<65 then
	  result:=6;
	elsif x>64 and x<129 then
	  result:=7;
	elsif x>128 and x<257 then
	  result:=8;
	elsif x>256 and x<513 then
	  result:=9;
	elsif x>512 and x<1025 then
	  result:=10;
	elsif x>1024 and x<2049 then
	  result:=11;
	elsif x>2048 and x<4097 then
	  result:=12;
	else
	  assert NO_WARNING
          report "vi_interface.LOG2_ceil_table: x out of range"
          severity WARNING;
  end if;
	return result;

end LOG2_ceil_table;


function Ceil_DIV(a, d: in NATURAL) return NATURAL is

  variable result : NATURAL;

begin

  result := a/d;
	if (a mod d)/=0 then
		result := result + 1;
	end if;
	return result;
	
end function Ceil_DIV;

function check_base(item : character; base : STRING) return BOOLEAN is

begin

if base="OCT" then
	if item = '0' or item = '1' or item = '2' or item = '3' or
	   item = '4' or item = '5' or item = '6' or item = '7' then
		 return TRUE;
	else
		ASSERT FALSE
		  report "Error: String character is not OCTAL."
		  severity Error;
		return FALSE;
	end if;
elsif base="DEC" then
	if item = '0' or item = '1' or item = '2' or item = '3' or item = '4' or
	   item = '5' or item = '6' or item = '7' or item = '8' or item = '9' then
		 return TRUE;
	else
		ASSERT FALSE
		  report "Error: String character is not DECIMAL."
		  severity Error;
		return FALSE;
	end if;
else
	ASSERT FALSE
	  report "Error: base parameter isn't either DEC or OCT."
	  severity Error;
	return FALSE;
end if;
	
end check_base;

function Convert_str_nat(pol_value, base : STRING) return NATURAL is
	variable base_factor : NATURAL;
	variable digit : NATURAL;
	variable result : NATURAL;

begin
	
	result:=0;
	digit:=0;
	if base="OCT" then
		base_factor:=8;
	elsif base="DEC" then
		base_factor:=10;
	end if;
	For I in 1 to pol_value'HIGH loop
  	case pol_value(I) is
    	when '0' => digit:=0;
    	when '1' => digit:=1;
    	when '2' => digit:=2;
    	when '3' => digit:=3;
    	when '4' => digit:=4;
    	when '5' => digit:=5;
    	when '6' => digit:=6;
    	when '7' => digit:=7;
    	when '8' => digit:=8;
    	when '9' => digit:=9;
    	when others => digit:=0;
    end case;
		result := result + digit*(base_factor**(pol_value'HIGH-I));
	end loop;
	return result;
	
end Convert_str_nat;


--function Get_ncodes(n: STRING) return NATURAL is
--
--  variable extracted_value : STRING(n'HIGH downto 1);
--	variable item : character;
--	variable I_ext, I_n, count_spaces : NATURAL; -- indexes
--	variable result : NATURAL;
--	variable not_finished : BOOLEAN;
--
--begin
--
--  count_spaces := 0;
--	I_ext := 1;
--	I_n := 1;
--	item := n(I_n);
--	not_finished := TRUE;
--	main: while not_finished loop
--		second: while (item /= ' ') and (I_n <= n'HIGH) loop
--			if check_base(item => item, base => "DEC") then
--				extracted_value(I_ext) := n(I_n);
--			else
--				return 1;
--			end if;
--			I_ext := I_ext + 1;
--			I_n := I_n + 1;
--			if I_n <= n'HIGH then
--				item := n(I_n);
--			else
--				not_finished := FALSE;
--			end if;
--		end loop second;
--		third : while item=' ' and (I_n <= n'HIGH) loop
--			I_n := I_n+1;
--			if I_n <= n'HIGH then
--				item := n(I_n);
--			else
--				not_finished := FALSE;
--			end if;
--		end loop third;
--		I_ext := 1;
--		count_spaces := count_spaces+1;
--	end loop main;
--	return count_spaces;  -- the number of codes is the number of spaces + 1
--	
--end Get_ncodes;


-- to be rewritten in order to make it FPGA Express complaint.
function Get_ncodes(n: STRING) return NATURAL is

	variable item : character;
	variable count_spaces : NATURAL; -- indexes
	variable not_finished, looking_for_more_spaces : BOOLEAN;

begin

  count_spaces := 0;
	not_finished := TRUE;
	looking_for_more_spaces := FALSE;
	main: For I_n in n'LOW to n'HIGH loop
	  item := n(I_n);
		if (I_n=n'LOW) and ((item=' ') or (item='_')) and not_finished then
			ASSERT NO_WARNING
				REPORT "vi_interface.Get_ncodes : Bad format on STRING of n's. First item is space"
				severity ERROR;
			return 0;
		elsif (item /= ' ') and (item /= '_') and not_finished then
			if not check_base(item => item, base => "DEC") then
				ASSERT NO_WARNING
					REPORT "vi_interface.Get_ncodes : mismatch base - digit"
					severity ERROR;
				return 0;
			end if;
			-- finish here if last
			if I_n=n'HIGH then
		 -- this is finished
			  not_finished := FALSE;
			else
				looking_for_more_spaces := FALSE;
			end if;
		elsif ((item=' ') or (item='_')) and (not looking_for_more_spaces) and not_finished then
			count_spaces := count_spaces+1;
			looking_for_more_spaces := TRUE;
		end if;
	end loop main;
	count_spaces := count_spaces+1;
	return count_spaces;
  -- the number of codes is the number of spaces + 1
	
end Get_ncodes;



-- to be rewritten to make it compliant with FPGA Express
function Get_n_list(n: STRING; ncodes : NATURAL) return NATURAL_ARRAY is

  variable extracted_value : STRING(n'LOW to n'HIGH);
	variable item : character;
	variable I_ext, count_items : NATURAL; -- indexes
	variable n_list : NATURAL_ARRAY(1 to ncodes);
	variable not_finished, looking_for_more_spaces : BOOLEAN;

begin

  count_items := 1;
	I_ext := n'LOW;
	not_finished := TRUE;
	looking_for_more_spaces := FALSE;
	n_list := (others => 0);
	main: For I_n in n'LOW to n'HIGH loop
	  item := n(I_n);
		if (I_n=n'LOW) and ((item=' ') or (item='_')) and not_finished then
			ASSERT NO_WARNING
				REPORT "vi_interface.Get_n_list : Bad format on STRING of pols. First item is space"
				severity ERROR;
				return n_list;
		elsif (item /= ' ') and (item /= '_') and not_finished then
			if check_base(item => item, base => "DEC") then
				extracted_value(I_ext) := n(I_n);
			else
				ASSERT NO_WARNING
				REPORT "vi_interface.Get_n_list : mismatch base - digit"
				severity ERROR;
				return n_list;
			end if;
			-- finish here
			if I_n=n'HIGH then
		 -- this is finished
			  not_finished := FALSE;
				n_list(count_items) := Convert_str_nat(pol_value => extracted_value(n'LOW to I_ext), base => "DEC");
			else
				I_ext := I_ext + 1;
				looking_for_more_spaces := FALSE;
			end if;
		elsif ((item=' ') or (item='_')) and (not looking_for_more_spaces) and not_finished then
			n_list(count_items) := Convert_str_nat(pol_value => extracted_value(n'LOW to I_ext-1), base => "DEC");
			count_items := count_items+1;
			looking_for_more_spaces := TRUE;
			I_ext := n'LOW;
		end if;
	end loop main;
	if not not_finished then
		return n_list;
	else
		ASSERT NO_WARNING
			REPORT "vi_interface.Get_n_list : main loop has finished unproperly: check format in n list"
			severity ERROR;
		return n_list;
	end if;
 	
end Get_n_list;


function Get_modes_list(modes: STRING; ncodes : NATURAL) return NATURAL_ARRAY is

	variable item : character;
	variable count_items : NATURAL; -- indexes
	variable m_list : NATURAL_ARRAY(1 to ncodes);
	variable not_finished, looking_for_more_spaces : BOOLEAN;

begin

  count_items := 1;
	not_finished := TRUE;
	looking_for_more_spaces := FALSE;
	m_list := (others => 0);
	main: For I_n in modes'LOW to modes'HIGH loop
	  item := modes(I_n);
		if (I_n=modes'LOW) and ((item=' ') or (item='_')) and not_finished then
			ASSERT NO_WARNING
				REPORT "vi_interface.Get_modes_list : Bad format on STRING of modes. First item is space"
				severity ERROR;
				return m_list;
		elsif (item /= ' ') and (item /= '_') and not_finished then
			if item='V' then -- Viterbi mode = 0
				m_list(count_items) := 0;
			elsif item='T' then -- Trellis mode = 1
				m_list(count_items) := 1;
			else
				ASSERT NO_WARNING
				REPORT "vi_interface.Get_modes_list : character not recognized"
				severity ERROR;
				return m_list;
			end if;
			-- finish here
			if I_n=modes'HIGH then
		 -- this is finished
			  not_finished := FALSE;
			else
				looking_for_more_spaces := FALSE;
			end if;
		elsif ((item=' ') or (item='_')) and (not looking_for_more_spaces) and not_finished then
			count_items := count_items+1;
			looking_for_more_spaces := TRUE;
		end if;
	end loop main;
	if not not_finished then
		return m_list;
	else
		ASSERT NO_WARNING
			REPORT "vi_interface.Get_modes_list : main loop has finished unproperly: check format in modes list"
			severity ERROR;
		return m_list;
	end if;
 	
end Get_modes_list;



function Get_n_max(n : STRING) return NATURAL is

  Constant ncodes : NATURAL := Get_ncodes(n);
	variable n_list : NATURAL_ARRAY(1 to ncodes);
	variable n_max : NATURAL;

begin

	n_list := Get_n_list(n => n, ncodes => ncodes);
	n_max := n_list(1);
	For I in 1 to ncodes loop
		if n_list(I) > n_max then
			n_max := n_list(I);
		end if;
	end loop;
	return n_max;
	
end Get_n_max;


function Get_n_max_modes(n, m : STRING) return NATURAL is

  Constant ncodes : NATURAL := Get_ncodes(n);
	Constant m_list : NATURAL_ARRAY(1 to ncodes) := Get_modes_list(modes => m, ncodes => ncodes);
	variable n_list : NATURAL_ARRAY(1 to ncodes);
	variable n_max : NATURAL;

begin

	n_list := Get_n_list(n => n, ncodes => ncodes);
	n_max := 2;
	For I in 1 to ncodes loop
		if m_list(I)=1 then -- tCM
			n_list(I):=4;
		end if;
		if n_list(I) > n_max then
			n_max := n_list(I);
		end if;
	end loop;
	return n_max;
	
end Get_n_max_modes;

function Get_rr_size(n, softbits: in NATURAL; punctured_rate : in STRING) return NATURAL is

	variable rr_size : NATURAL;

begin
  
	if punctured_rate="unpunctured" then
		rr_size := n*softbits;
	else
		rr_size := softbits;
	end if;
	return rr_size;

end function Get_rr_size;

function LOG2_ceil_avoid_one(n : in NATURAL) return NATURAL is

	variable sel_code_size : NATURAL;

begin


--ncodes := Get_ncodes(n);
if n > 1 then
	sel_code_size := LOG2_ceil_table(n);
else
	sel_code_size := 1;
end if;
return sel_code_size;
	
end function LOG2_ceil_avoid_one;

function mul(a, b: in NATURAL) return NATURAL is
	variable result : NATURAL;
begin
	result := a*b;
	return result;
end mul;


end vi_interface;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美一区二区三区精品久久| 国产午夜精品美女毛片视频| 日韩欧美高清dvd碟片| 欧美激情一区二区| 日本亚洲欧美天堂免费| 不卡高清视频专区| 精品久久久久久综合日本欧美| 中文字幕亚洲在| 精品亚洲porn| 欧美一区二区视频免费观看| 亚洲少妇30p| 豆国产96在线|亚洲| 欧美一级久久久久久久大片| 夜夜嗨av一区二区三区网页| 国产成人精品一区二区三区四区| 91精品视频网| 五月天婷婷综合| 欧美在线看片a免费观看| 欧美激情一区二区三区在线| 久久99精品久久只有精品| 欧美人狂配大交3d怪物一区 | 一区二区高清在线| 成人高清视频在线观看| 欧美精品一区二区三| 免费观看30秒视频久久| 欧美妇女性影城| 婷婷一区二区三区| 欧美主播一区二区三区美女| 国产精品护士白丝一区av| 国产一区二区三区综合| 精品国产一区久久| 久久国产精品99久久人人澡| 日韩精品资源二区在线| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩中文一区| 午夜精品久久久久久不卡8050| 欧美影院一区二区三区| 亚洲高清久久久| 欧美日韩国产色站一区二区三区| 亚洲成人激情av| 69堂成人精品免费视频| 免费在线成人网| 久久久午夜精品| 成人激情午夜影院| 亚洲美女少妇撒尿| 欧美精品三级在线观看| 免费高清在线一区| 久久久久久一二三区| 成人黄色av电影| 日韩伦理av电影| 8x8x8国产精品| 激情综合色播五月| 国产精品久久久久久久久免费樱桃 | 久久夜色精品一区| 福利91精品一区二区三区| 国产精品久久久久久福利一牛影视 | 婷婷夜色潮精品综合在线| 91精品国产综合久久精品性色| 美腿丝袜在线亚洲一区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美日韩另类一区| 精品影视av免费| 中文字幕免费一区| 欧美日韩国产bt| 国产大陆亚洲精品国产| 一区二区三区高清| 日韩精品自拍偷拍| 色综合天天综合网国产成人综合天 | 欧美三级日韩三级| 久久精品国产免费看久久精品| 日本一区二区三区久久久久久久久不 | 国产宾馆实践打屁股91| 一区二区欧美在线观看| 欧美大片拔萝卜| 91网址在线看| 久久电影国产免费久久电影| 国产精品欧美极品| 欧美精品丝袜中出| 99久久精品免费看国产| 麻豆一区二区三| 亚洲精品成人天堂一二三| 欧美mv日韩mv国产网站app| a4yy欧美一区二区三区| 日本午夜一本久久久综合| 亚洲视频在线一区| 精品成人免费观看| 欧美区一区二区三区| 成人99免费视频| 国产中文字幕精品| 日韩成人伦理电影在线观看| 亚洲欧洲日韩女同| 欧美精品一区男女天堂| 欧美精品久久一区二区三区| av在线不卡网| 国产成人免费视频网站| 五月天视频一区| 一区二区三区av电影| 国产精品国产三级国产普通话蜜臀| 日韩欧美精品在线| 欧美精品色综合| 欧美日韩国产精品成人| 色吊一区二区三区| 波多野结衣在线一区| 麻豆视频观看网址久久| 午夜精品福利一区二区蜜股av| 自拍视频在线观看一区二区| 久久精品夜夜夜夜久久| 精品三级在线观看| 日韩视频在线永久播放| 3d动漫精品啪啪| 欧美老肥妇做.爰bbww视频| 欧美综合一区二区| 色婷婷综合久久久中文一区二区| 成年人午夜久久久| 播五月开心婷婷综合| 粉嫩久久99精品久久久久久夜| 国产精品12区| 国产精品18久久久久久久久| 国产精品一区二区x88av| 久久99热99| 国产在线精品一区在线观看麻豆| 免费成人在线播放| 久久精品国产一区二区三| 精品中文av资源站在线观看| 久久精品国产亚洲a| 国产一区二区免费在线| 国产精品亚洲第一| eeuss鲁片一区二区三区在线看| 99精品视频在线免费观看| 91原创在线视频| 欧美午夜片在线观看| 7777精品伊人久久久大香线蕉经典版下载| 欧美午夜精品电影| 日韩欧美一二三区| 欧美激情艳妇裸体舞| 中文字幕一区二区三| 一二三区精品视频| 奇米精品一区二区三区在线观看| 久久精品999| 成人免费毛片app| 色94色欧美sute亚洲线路二| 欧美精品日韩精品| 国产人伦精品一区二区| 亚洲欧美日韩国产综合在线| 亚洲成av人**亚洲成av**| 日本欧美久久久久免费播放网| 国产在线麻豆精品观看| 99精品视频一区| 88在线观看91蜜桃国自产| 久久久99精品久久| 一区二区三区四区五区视频在线观看| 天天综合日日夜夜精品| 国产激情一区二区三区| 91黄色免费版| 精品福利一区二区三区免费视频| 国产精品久线观看视频| 丝袜美腿高跟呻吟高潮一区| 国产一区二区毛片| 欧美日韩国产高清一区二区 | 91福利在线导航| 91精品国产品国语在线不卡| 国产日本欧洲亚洲| 婷婷六月综合网| 成人av先锋影音| 日韩午夜在线影院| 亚洲欧美日韩在线| 国产剧情av麻豆香蕉精品| 欧美亚洲国产一区二区三区| 久久久久久夜精品精品免费| 亚洲电影激情视频网站| 成人在线一区二区三区| 日韩亚洲欧美高清| 亚洲欧美日韩在线不卡| 国产精品一区二区男女羞羞无遮挡| 欧美日韩亚洲另类| 国产精品久久久久久久久图文区 | 紧缚捆绑精品一区二区| 欧美在线小视频| 中文字幕在线一区| 国产一区二区三区在线观看免费| 欧美乱熟臀69xxxxxx| 一区二区三区四区在线免费观看| 国产91精品精华液一区二区三区 | 欧美国产乱子伦| 激情成人综合网| 91精品视频网| 天天亚洲美女在线视频| 欧美一a一片一级一片| 亚洲乱码国产乱码精品精的特点| 国产福利精品一区二区| 欧美精品一区男女天堂| 久久99国产精品免费| 91麻豆精品国产91久久久久久久久 | 亚洲精品国产成人久久av盗摄| 国产精品一区二区三区四区| 久久综合久久综合亚洲| 免费观看成人av| 欧美一二三四在线| 麻豆精品一区二区综合av| 欧美一区国产二区|