• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

能够计算A平方减1的算术单元设计VHDL代码Quartus仿真

08/10 09:10
421
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240R0200P2355.doc

共1个文件

名称:能够计算A平方减1的算术单元设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

该项目的目标是设计一个能够计算A平方减1的算术单元。该单元将接收操作数A,8位有符号数。LOAD引脚处的1到0转换将操作数锁存到内部寄存器RA中。该单元在16位寄存器RZ输出端口中输出结果。每次计算都以LOAD信号开始,以END_FLAG信号结束。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

设计文档:

1.工程文件

2.程序运行

3.程序RTL图

4.Testbench

5.时序仿真图

5.1 整体仿真图

A为输入,Z为输出,可见Z=A2-1;图中-100的结果未计算完成时CLR清零信号拉高,故输出为0。

5.2 分模块仿真

下降沿检测模块仿真:检测LOAD的下降沿

取绝对值模块仿真:

平方减一模块仿真,CLR信号清1,减一后输出为0

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY arithmetic_unit IS
   PORT (
      CLK       : IN STD_LOGIC;
      A         : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
      CLR       : IN STD_LOGIC;
      LOAD      : IN STD_LOGIC;
      
      Z         : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
      END_FLAG  : OUT STD_LOGIC
   );
END arithmetic_unit;
ARCHITECTURE arithmetic_u OF arithmetic_unit IS
--例化下降沿检测模块
component down_delect IS
   PORT (
      CLK        : IN STD_LOGIC;
      LOAD       : IN STD_LOGIC;
      LOAD_down  : OUT STD_LOGIC
   );
END component;
--例化求平均值值-1模块
component square IS
   PORT (
      CLK               : IN STD_LOGIC;
      CLR               : IN STD_LOGIC;
      LOAD_down         : IN STD_LOGIC;
      unsigned_operand  : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
      END_FLAG          : OUT STD_LOGIC;
      square_out        : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
   );
END component;
--例化取绝对中模块
component mod_operand IS
   PORT (
      operand        : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
      Model_operand  : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
   );
END component;
   
   SIGNAL LOAD_down      : STD_LOGIC;
   
   SIGNAL RA             : STD_LOGIC_VECTOR(15 DOWNTO 0);
   
   SIGNAL Model_operand  : STD_LOGIC_VECTOR(15 DOWNTO 0);
   
   -- Declare intermediate signals for referenced outputs
   SIGNAL Z_signal        : STD_LOGIC_VECTOR(31 DOWNTO 0);
   SIGNAL END_FLAG_signal : STD_LOGIC;
BEGIN
   -- Drive referenced outputs
   Z <= Z_signal;
   END_FLAG <= END_FLAG_signal;
   
--调用检测下降沿模块,因为要求在LOAD的下降沿加载数据,故需要检测下降沿
   downdelect : down_delect
      PORT MAP (
         clk        => CLK,
         load       => LOAD,
         load_down  => LOAD_down
      );
--在LOAD下降沿时加载A到RA模块
   PROCESS (CLK)
   BEGIN
      IF (CLK'EVENT AND CLK = '1') THEN
         IF (LOAD_down = '1') THEN--下降沿信号为1
            RA <= A;
         ELSE
            RA <= RA;
         END IF;
      END IF;
   END PROCESS;
   
   
 --调用取绝对值模块,将将负数转换为其绝对值  
   Model : mod_operand
      PORT MAP (
         operand        => RA,
         model_operand  => Model_operand
      );

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=921

  • 2-240R0200P2355.doc
    下载

相关推荐