当前位置:   article > 正文

VHDL数据取反操作_vhdl取反

vhdl取反

对于数据取反,通常需要加入use ieee.std_logic_signed.all程序包。这里举例,对8位宽的数据进行取反操作。

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use ieee.std_logic_arith.all;
  4. use ieee.std_logic_signed.all;
  5. entity top is
  6. port(
  7. clk : in std_logic;
  8. rst : in std_logic;
  9. din : in std_logic_vector(7 downto 0);
  10. dout : out std_logic_vector(7 downto 0)
  11. );
  12. end top;
  13. architecture Behavioral of top is
  14. begin
  15. process(clk,rst)
  16. begin
  17. if rst = '1' then
  18. dout <= (others => '0');
  19. elsif rising_edge(clk) then
  20. dout <= -din;
  21. end if;
  22. end process;
  23. end Behavioral;

添加testbench,对代码仿真。

  1. module tst_top;
  2. // Inputs
  3. reg clk;
  4. reg rst;
  5. reg [7:0] din;
  6. // Outputs
  7. wire [7:0] dout;
  8. // Instantiate the Unit Under Test (UUT)
  9. top uut (
  10. .clk(clk),
  11. .rst(rst),
  12. .din(din),
  13. .dout(dout)
  14. );
  15. initial begin
  16. // Initialize Inputs
  17. clk = 0;
  18. rst = 1;
  19. din = 8'd0;
  20. // Wait 100 ns for global reset to finish
  21. #100;
  22. rst = 0;
  23. end
  24. always @(posedge clk)
  25. begin
  26. din <= din + 1;
  27. end
  28. always #5 clk =~clk;
  29. endmodule

设计对渐加数取反,在Modelsim上观察仿真结果

现象:根据仿真结果看,在输入10000000(-128)时,输出为10000000(-128),结果出错。

分析出错原因:8位有符号数的表示范围为-128~127,无法表示128,所以溢出导致出错。

解决方法:判断输入数据是否为10000000。是,输出127;否,直接取反。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/432427
推荐阅读
  

闽ICP备14008679号