📄 root_a.vhd
字号:
library ieee;use ieee.std_logic_1164.all;library work;use work.usbpkg.all;library std;use std.textio.all;architecture a of root is signal timer :boolean; signal wakeup :boolean; type boolvec is array (natural range <>) of boolean; procedure clrdata (variable s: inout string) is begin for i in s'range loop s(i) := NUL; end loop; end clrdata;begin process (timer,dport) begin wakeup <= not wakeup; end process; process variable id: natural := 0; variable ll : line; variable endpts: boolvec(0 to MAXENDPT-1); variable j :integer := 0; variable local_data:string(1 to 80); begin -- let things stabilize wait for 10 ns; for i in 1 to 31 loop -- look for end points -- send an 'OUT' packet dport.id <= POUT; dport.dest <= i; clrdata(local_data); dport.data <= local_data; wait for PTIME ; dport.id <= NONE; dport.dest <= i; wait for RTIME; timer <= not (timer) after 2*PTIME; -- timer signal wait on wakeup; if (dport.id /= PACK) then next; end if; write(ll,string'("Found Endpoint ")); write(ll,i); write(ll,string'(", data is ")); write(ll,dport.data); writeline(OUTPUT,ll); local_data := dport.data; endpts(i) := TRUE; -- wait until line is released wait on dport; -- now modify packet -- find end of string j := 1; while (local_data(j) /= NUL) loop j := j + 1; end loop; j := j+1; local_data(j to j+4) := "FOUND"; dport.data <= local_data; write(ll,string'("Modifying Endpoint")); writeline(OUTPUT,ll); dport.id <= PIN; dport.dest <= i; wait for PTIME ; dport.id <= NONE; dport.dest <= i; wait for RTIME; timer <= not (timer) after 2*PTIME; -- timer signal wait on wakeup; if (dport.id /= PACK) then write(ll,string'("Endpoint did not respond to PIN packet!!! Modify failed!")); writeline(OUTPUT,ll); next; end if; -- wait until line is released wait on dport; -- read data again dport.id <= POUT; dport.dest <= i; clrdata(local_data); dport.data <= local_data; wait for PTIME ; dport.id <= NONE; dport.dest <= i; wait for RTIME; timer <= not (timer) after 2*PTIME; -- timer signal wait on wakeup; if (dport.id /= PACK) then write(ll,string'("Endpoint did not respond to second POUT packet!!! Modify failed!")); writeline(OUTPUT,ll); next; end if; write(ll,string'("Modified Endpoint data: ")); write(ll,dport.data); writeline(OUTPUT,ll); -- wait until line is released wait on dport; end loop; write(ll,string'("Finished Scan for Endpoints ")); writeline(OUTPUT,ll); wait; end process;end a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -