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

📄 cpu_jtag_debug_module.vhd

📁 nois 2cpu 硬件实现编程
💻 VHD
字号:
--Legal Notice: (C)2006 Altera Corporation. All rights reserved.  Your--use of Altera Corporation's design tools, logic functions and other--software and tools, and its AMPP partner logic functions, and any--output files any of the foregoing (including device programming or--simulation files), and any associated documentation or information are--expressly subject to the terms and conditions of the Altera Program--License Subscription Agreement or other applicable license agreement,--including, without limitation, that your use is for the sole purpose--of programming logic devices manufactured by Altera and sold by Altera--or its authorized distributors.  Please refer to the applicable--agreement for further details.-- turn off superfluous VHDL processor warnings -- altera message_level Level1 -- altera message_off 10034 10035 10036 10037 10230 10240 10030 library altera;use altera.altera_europa_support_lib.all;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cpu_jtag_debug_module is         generic (                 SLD_NODE_INFO : INTEGER := 286279168                 );        port (              -- inputs:                 signal MonDReg : IN STD_LOGIC_VECTOR (31 DOWNTO 0);                 signal break_readreg : IN STD_LOGIC_VECTOR (31 DOWNTO 0);                 signal clk : IN STD_LOGIC;                 signal clrn : IN STD_LOGIC;                 signal dbrk_hit0_latch : IN STD_LOGIC;                 signal dbrk_hit1_latch : IN STD_LOGIC;                 signal dbrk_hit2_latch : IN STD_LOGIC;                 signal dbrk_hit3_latch : IN STD_LOGIC;                 signal debugack : IN STD_LOGIC;                 signal ena : IN STD_LOGIC;                 signal ir_in : IN STD_LOGIC_VECTOR (1 DOWNTO 0);                 signal jtag_state_udr : IN STD_LOGIC;                 signal monitor_error : IN STD_LOGIC;                 signal monitor_ready : IN STD_LOGIC;                 signal raw_tck : IN STD_LOGIC;                 signal reset_n : IN STD_LOGIC;                 signal resetlatch : IN STD_LOGIC;                 signal rti : IN STD_LOGIC;                 signal shift : IN STD_LOGIC;                 signal tdi : IN STD_LOGIC;                 signal tracemem_on : IN STD_LOGIC;                 signal tracemem_trcdata : IN STD_LOGIC_VECTOR (35 DOWNTO 0);                 signal tracemem_tw : IN STD_LOGIC;                 signal trc_im_addr : IN STD_LOGIC_VECTOR (6 DOWNTO 0);                 signal trc_on : IN STD_LOGIC;                 signal trc_wrap : IN STD_LOGIC;                 signal trigbrktype : IN STD_LOGIC;                 signal trigger_state_1 : IN STD_LOGIC;                 signal update : IN STD_LOGIC;                 signal usr1 : IN STD_LOGIC;              -- outputs:                 signal ir_out : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);                 signal irq : OUT STD_LOGIC;                 signal jdo : OUT STD_LOGIC_VECTOR (37 DOWNTO 0);                 signal jrst_n : OUT STD_LOGIC;                 signal st_ready_test_idle : OUT STD_LOGIC;                 signal take_action_break_a : OUT STD_LOGIC;                 signal take_action_break_b : OUT STD_LOGIC;                 signal take_action_break_c : OUT STD_LOGIC;                 signal take_action_ocimem_a : OUT STD_LOGIC;                 signal take_action_ocimem_b : OUT STD_LOGIC;                 signal take_action_tracectrl : OUT STD_LOGIC;                 signal take_action_tracemem_a : OUT STD_LOGIC;                 signal take_action_tracemem_b : OUT STD_LOGIC;                 signal take_no_action_break_a : OUT STD_LOGIC;                 signal take_no_action_break_b : OUT STD_LOGIC;                 signal take_no_action_break_c : OUT STD_LOGIC;                 signal take_no_action_ocimem_a : OUT STD_LOGIC;                 signal take_no_action_tracemem_a : OUT STD_LOGIC;                 signal tdo : OUT STD_LOGIC              );end entity cpu_jtag_debug_module;architecture europa of cpu_jtag_debug_module is                signal DRsize :  STD_LOGIC_VECTOR (2 DOWNTO 0);                signal dr_update1 :  STD_LOGIC;                signal dr_update2 :  STD_LOGIC;                signal in_between_shiftdr_and_updatedr :  STD_LOGIC;                signal internal_jdo1 :  STD_LOGIC_VECTOR (37 DOWNTO 0);                signal internal_jrst_n1 :  STD_LOGIC;                signal ir :  STD_LOGIC_VECTOR (1 DOWNTO 0);                signal jxdr :  STD_LOGIC;                signal sr :  STD_LOGIC_VECTOR (37 DOWNTO 0);                signal st_shiftdr :  STD_LOGIC;                signal st_updatedr :  STD_LOGIC;                signal st_updateir :  STD_LOGIC;begin  process (clk)  begin    if clk'event and clk = '1' then      dr_update1 <= st_updatedr;      dr_update2 <= dr_update1;      jxdr <= NOT dr_update1 AND dr_update2;    end if;  end process;  take_action_ocimem_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("00"))))) AND NOT internal_jdo1(35)) AND internal_jdo1(34);  take_no_action_ocimem_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("00"))))) AND NOT internal_jdo1(35)) AND NOT internal_jdo1(34);  take_action_ocimem_b <= (jxdr AND to_std_logic(((ir = std_logic_vector'("00"))))) AND internal_jdo1(35);  take_action_tracemem_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("01"))))) AND NOT internal_jdo1(37)) AND internal_jdo1(36);  take_no_action_tracemem_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("01"))))) AND NOT internal_jdo1(37)) AND NOT internal_jdo1(36);  take_action_tracemem_b <= (jxdr AND to_std_logic(((ir = std_logic_vector'("01"))))) AND internal_jdo1(37);  take_action_break_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND NOT internal_jdo1(36)) AND internal_jdo1(37);  take_no_action_break_a <= ((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND NOT internal_jdo1(36)) AND NOT internal_jdo1(37);  take_action_break_b <= (((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND internal_jdo1(36)) AND NOT internal_jdo1(35)) AND internal_jdo1(37);  take_no_action_break_b <= (((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND internal_jdo1(36)) AND NOT internal_jdo1(35)) AND NOT internal_jdo1(37);  take_action_break_c <= (((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND internal_jdo1(36)) AND internal_jdo1(35)) AND internal_jdo1(37);  take_no_action_break_c <= (((jxdr AND to_std_logic(((ir = std_logic_vector'("10"))))) AND internal_jdo1(36)) AND internal_jdo1(35)) AND NOT internal_jdo1(37);  take_action_tracectrl <= (jxdr AND to_std_logic(((ir = std_logic_vector'("11"))))) AND internal_jdo1(15);  process (raw_tck, internal_jrst_n1)  begin    if internal_jrst_n1 = '0' then      ir_out <= std_logic_vector'("00");    elsif raw_tck'event and raw_tck = '1' then      ir_out <= Std_Logic_Vector'(A_ToStdLogicVector(debugack) & A_ToStdLogicVector(monitor_ready));    end if;  end process;  process (raw_tck, internal_jrst_n1)  begin    if internal_jrst_n1 = '0' then      sr <= std_logic_vector'("00000000000000000000000000000000000000");      DRsize <= std_logic_vector'("000");    elsif raw_tck'event and raw_tck = '1' then      if std_logic'(st_updateir) = '1' then         case ir_in is            when std_logic_vector'("00") =>                 DRsize <= std_logic_vector'("100");            -- when std_logic_vector'("00")                     when std_logic_vector'("01") =>                 DRsize <= std_logic_vector'("101");            -- when std_logic_vector'("01")                     when std_logic_vector'("10") =>                 DRsize <= std_logic_vector'("101");            -- when std_logic_vector'("10")                     when std_logic_vector'("11") =>                 DRsize <= std_logic_vector'("010");            -- when std_logic_vector'("11")                     when others =>             -- when others                 end case; -- ir_in        ir <= ir_in;      elsif std_logic'((((NOT shift AND NOT usr1) AND ena) AND NOT in_between_shiftdr_and_updatedr)) = '1' then         case ir is            when std_logic_vector'("00") =>                 sr(35) <= debugack;                sr(34) <= monitor_error;                sr(33) <= resetlatch;                sr(32 DOWNTO 1) <= MonDReg;                sr(0) <= monitor_ready;            -- when std_logic_vector'("00")                     when std_logic_vector'("01") =>                 sr(35 DOWNTO 0) <= tracemem_trcdata;                sr(37) <= tracemem_tw;                sr(36) <= tracemem_on;            -- when std_logic_vector'("01")                     when std_logic_vector'("10") =>                 sr(37) <= trigger_state_1;                sr(36) <= dbrk_hit3_latch;                sr(35) <= dbrk_hit2_latch;                sr(34) <= dbrk_hit1_latch;                sr(33) <= dbrk_hit0_latch;                sr(32 DOWNTO 1) <= break_readreg;                sr(0) <= trigbrktype;            -- when std_logic_vector'("10")                     when std_logic_vector'("11") =>                 sr(15 DOWNTO 12) <= std_logic_vector'("000") & (A_TOSTDLOGICVECTOR(std_logic'('0')));                sr(11 DOWNTO 2) <= std_logic_vector'("000") & (trc_im_addr);                sr(1) <= trc_wrap;                sr(0) <= trc_on;            -- when std_logic_vector'("11")                     when others =>             -- when others                 end case; -- ir      elsif std_logic'(((shift AND NOT usr1) AND ena)) = '1' then         case DRsize is            when std_logic_vector'("000") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 2) & A_ToStdLogicVector(tdi));            -- when std_logic_vector'("000")                     when std_logic_vector'("001") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 9) & A_ToStdLogicVector(tdi) & sr(7 DOWNTO 1));            -- when std_logic_vector'("001")                     when std_logic_vector'("010") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 17) & A_ToStdLogicVector(tdi) & sr(15 DOWNTO 1));            -- when std_logic_vector'("010")                     when std_logic_vector'("011") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 33) & A_ToStdLogicVector(tdi) & sr(31 DOWNTO 1));            -- when std_logic_vector'("011")                     when std_logic_vector'("100") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & A_ToStdLogicVector(sr(37)) & A_ToStdLogicVector(tdi) & sr(35 DOWNTO 1));            -- when std_logic_vector'("100")                     when std_logic_vector'("101") =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 1));            -- when std_logic_vector'("101")                     when others =>                 sr <= Std_Logic_Vector'(A_ToStdLogicVector(tdi) & sr(37 DOWNTO 2) & A_ToStdLogicVector(tdi));            -- when others                 end case; -- DRsize      end if;    end if;  end process;  tdo <= sr(0);  st_ready_test_idle <= rti;  process (raw_tck)  begin    if raw_tck'event and raw_tck = '1' then      if std_logic'(((NOT usr1 AND ena) AND jtag_state_udr)) = '1' then         internal_jdo1 <= sr;      end if;    end if;  end process;  process (raw_tck, update)  begin    if update = '1' then      st_shiftdr <= std_logic'('0');      if std_logic'((usr1 AND ena)) = '1' then         st_updateir <= std_logic'('1');        st_updatedr <= std_logic'('0');      elsif std_logic'((NOT usr1 AND ena)) = '1' then         st_updateir <= std_logic'('0');        st_updatedr <= std_logic'('1');      else        st_updateir <= std_logic'('0');        st_updatedr <= std_logic'('0');      end if;    elsif raw_tck'event and raw_tck = '1' then      if std_logic'(((shift AND NOT usr1) AND ena)) = '1' then         st_updateir <= std_logic'('0');        st_updatedr <= std_logic'('0');        st_shiftdr <= std_logic'('1');      else        st_updateir <= std_logic'('0');        st_updatedr <= std_logic'('0');        st_shiftdr <= std_logic'('0');      end if;    end if;  end process;  process (raw_tck, internal_jrst_n1)  begin    if internal_jrst_n1 = '0' then      in_between_shiftdr_and_updatedr <= std_logic'('0');    elsif raw_tck'event and raw_tck = '1' then      if std_logic'(st_shiftdr) = '1' then         in_between_shiftdr_and_updatedr <= std_logic'('1');      elsif std_logic'(st_updatedr) = '1' then         in_between_shiftdr_and_updatedr <= std_logic'('0');      end if;    end if;  end process;  --vhdl renameroo for output signals  jdo <= internal_jdo1;  --vhdl renameroo for output signals  jrst_n <= internal_jrst_n1;--synthesis translate_off    internal_jrst_n1 <= reset_n;--synthesis translate_on--synthesis read_comments_as_HDL on--    internal_jrst_n1 <= clrn;--synthesis read_comments_as_HDL offend europa;

⌨️ 快捷键说明

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