Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. -- isqroot_seq
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4. use ieee.numeric_std.all;
  5.  
  6. entity isqroot_seq is
  7. generic (
  8. NBITS : positive := 8
  9. );
  10. port (
  11. res_in : IN unsigned(NBITS - 1 downto 0);
  12. rup : IN std_logic;
  13. clk : IN std_logic;
  14. rst : IN std_logic;
  15. res_out : OUT unsigned(NBITS - 1 downto 0)
  16. );
  17. end entity isqroot_seq;
  18.  
  19. architecture seq_arch of isqroot_seq is
  20. type states is (IDLE, INIT, COMPUTE, ROUNDUP);
  21. constant rst_state : states := IDLE;
  22. signal state_reg, state_next : states;
  23. begin
  24.  
  25.  
  26.  
  27. REG : process( clk,rst )
  28. begin
  29. if rst = '1' then
  30. state_reg <= rst_state;
  31. elsif rising_edge(clk) then
  32. state_reg <= state_next;
  33. end if;
  34. end process ; -- REG
  35.  
  36.  
  37.  
  38. Next_state : process( state_reg, res_in, start, delta ) -- clk ?
  39. begin
  40. state_next <= state_reg;
  41. case (state_reg) is
  42. when IDLE =>
  43. if start = '0' then
  44. state_next <= IDLE;
  45. elsif start= '1' then
  46. state_next <= INIT;
  47. end if;
  48. when INIT => state_next <= COMPUTE;
  49. when COMPUTE =>
  50. if delta >= '1' then
  51. state_next <= COMPUTE;
  52. else
  53. state_next <= ROUNDUP;
  54. end if;
  55. when ROUNDUP => state_next <= IDLE;
  56. when others => null;
  57. end case;
  58. end process ; -- Next_state
  59.  
  60.  
  61.  
  62. MULTIPLIER : process( state_reg ) -- clk ?
  63. variable: delta_var, iroot_var, res_var: unsigned(NBITS-1 downto 0);
  64. begin
  65. delta_var := (others => '0');
  66. iroot_var := (others => '0');
  67. res_var := (others => '0');
  68. case (state_reg) is
  69. when IDLE => null;
  70. when INIT =>
  71. delta_var := shift_left( '1' , NBITS/2-1 );
  72. iroot_var := (others => '0');
  73. res_var := res_in;
  74. when COMPUTE =>
  75. if (iroot_var + delta_var) >= res_var then
  76. res_var := res_var - (iroot_var + delta_var);
  77. iroot_var := iroot_var + shift_left(delta_var,1);
  78. end if;
  79. iroot_var := shift_right(iroot_var,1);
  80. delta_var := shift_right(delta_var,2);
  81. when ROUNDUP =>
  82. if (rup AND res_var >= iroot_var) then
  83. iroot_var := iroot_var + 1;
  84. end if;
  85. when others => null;
  86. end case;
  87. end process ; -- MULTIPLIER
  88.  
  89. end architecture seq_arch;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement