EngineerFag

Digital Logic HW12 code/Do file

Dec 8th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. -- SERIAL ADDER CODE --
  2. LIBRARY ieee;
  3. USE ieee.std_logic_1164.all;
  4.  
  5. ENTITY serial IS
  6. GENERIC (length: INTEGER := 8);
  7. PORT ( Clock: IN STD_LOGIC;
  8. Reset: IN STD_LOGIC;
  9. A: IN STD_LOGIC_VECTOR(length-1 DOWNTO 0);
  10. B: IN STD_LOGIC_VECTOR(length-1 DOWNTO 0);
  11. Sum: BUFFER STD_LOGIC_VECTOR(length-1 DOWNTO 0));
  12. END serial;
  13.  
  14. ARCHITECTURE Behavior OF serial IS
  15. COMPONENT shiftrne
  16. GENERIC (N: INTEGER := 4);
  17. PORT( R: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
  18. L: IN STD_LOGIC;
  19. E: IN STD_LOGIC;
  20. w: IN STD_LOGIC;
  21. Clock: IN STD_LOGIC;
  22. Q: BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0));
  23. END COMPONENT;
  24.  
  25. SIGNAL QA, QB, Null_in: STD_LOGIC_VECTOR(length-1 DOWNTO 0);
  26. SIGNAL s, Low, High, Run: STD_LOGIC;
  27. SIGNAL Count: INTEGER RANGE 0 TO length;
  28. TYPE State_type IS (G, H);
  29. SIGNAL y: State_type;
  30.  
  31. BEGIN
  32. Low<='0'; High<='1';
  33. ShiftA: shiftrne GENERIC MAP (N => length)
  34. PORT MAP(A, Reset, High, Low, Clock, QA);
  35. ShiftB: shiftrne GENERIC MAP (N => length)
  36. PORT MAP(B, Reset, High, Low, Clock, QB);
  37. AdderFSM: PROCESS(Reset, Clock)
  38. BEGIN
  39. IF Reset = '1' THEN
  40. y<=G;
  41. ELSIF Clock'EVENT AND Clock = '1' THEN
  42. CASE y IS
  43. WHEN G=>
  44. IF QA(0)='1' AND QB(0)='1' THEN y<= H;
  45. ELSE y<=G;
  46. END IF;
  47. WHEN H =>
  48. IF QA(0)='0' AND QB(0)='0' THEN y<= G;
  49. ELSE y<=H;
  50. END IF;
  51. END CASE;
  52. END IF;
  53. END PROCESS AdderFSM;
  54.  
  55. WITH y SELECT
  56. s <= QA(0) XOR QB(0) WHEN G,
  57. NOT(QA(0) XOR QB(0))WHEN H;
  58. Null_in <= (OTHERS => '0');
  59. ShiftSum: shiftrne GENERIC MAP (N => length)
  60. PORT MAP (Null_in, Reset, Run, s, Clock, Sum);
  61. Stop: PROCESS
  62. BEGIN
  63. WAIT UNTIL (Clock'EVENT AND Clock = '1');
  64. IF Reset = '1'THEN
  65. Count <= length;
  66. ELSIF Run = '1' THEN
  67. COunt <= Count-1;
  68. END IF;
  69. END PROCESS;
  70. Run <= '0' WHEN Count = 0 ELSE'1';
  71. END Behavior;
  72.  
  73. -- LEFT TO RIGHT SHIFT REGISTER CODE --
  74. LIBRARY ieee;
  75. USE ieee.std_logic_1164.all;
  76.  
  77. ENTITY shiftrne IS
  78. GENERIC (N: INTEGER := 4);
  79. PORT( R: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
  80. L: IN STD_LOGIC;
  81. E: IN STD_LOGIC;
  82. w: IN STD_LOGIC;
  83. Clock: IN STD_LOGIC;
  84. Q: BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0));
  85. END shiftrne;
  86.  
  87. ARCHITECTURE Behavior OF shiftrne IS
  88. BEGIN
  89. PROCESS
  90. BEGIN
  91. WAIT UNTIL Clock'EVENT AND Clock = '1';
  92. IF E = '1' THEN
  93. IF L = '1' THEN
  94. Q <= R;
  95. ELSE
  96. Genbits: FOR i IN 0 TO N-2 LOOP
  97. Q(i) <= Q(i+1);
  98. END LOOP;
  99. Q(N-1) <= w;
  100. END IF;
  101. END IF;
  102. END PROCESS;
  103. END Behavior;
  104.  
  105. -- DO FILE --
  106. vsim -gui work.serial
  107. add wave sim:/serial/*
  108. # Deposited values change for each problem
  109. force -deposit /Clock 1 0, 0 10ns -repeat 20ns
  110. force -deposit /Reset 0 0, 1 180ns
  111. force -deposit /A 16#BB 0
  112. force -deposit /B 16#44 0
  113. run 200ns
  114. view wave
Advertisement
Add Comment
Please, Sign In to add comment