ch1 数字系统硬件设计概述

ch1 数字系统硬件设计概述

EDA软件平台:Quartus ǁ 、MAX+PLUSǁ (都是奥特拉ALTERA公司的)
硬件描述语言(HDL);我们所学的是VHDL,高级语言的一种,类似于c语言
目标芯片(可编程器件):CPLD、FPGA
完整的VHDL语言由实体和构造体组成
实体:描述系统的外部特性
构造体:描述系统的内部特性
VHDL语言还有库,包集合,配置。(一共5部分)

1.1传统的系统硬件设计方法

主要特征:
1.采用自下至上的设计方法
2.采用通用的逻辑元器件
3在系统硬件设计的后期进行仿真和调试
4主要设计文件是电原理图
在这里插入图片描述
在这里插入图片描述

1.2利用硬件描述语言的硬件电路设计方法

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

利用VHDL语言设计系统硬件的方法具有以下特点
1.采用自上至下(Top Down)的设计方法
从系统的总体要求出发,自上至下地逐步将设计内容细化,最后完成系统硬件的整体设计。在利用HDL的硬件设计方法中,将系统硬件设计自上至下分为3个层次进行:行为描述、RTL方式描述、逻辑综合。
第一层次:行为描述
对整个系统数学模型的描述
举例——六进制计数器
利用VHDL语言以行为方式描述六进制计数器的工作特性

LIBRARY IEEE;       //IEEE 是库
USE IEEE.STD_LOGIC_1164.ALL; // 包集合
ENTITY counter IS
PORT(
clk:IN STD_LOGIC;
 rs:IN STD_LOGIC;
 counter_out:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
 END ENTITY counter;
 ARCHITECTURE behav OF counter IS
 SIGNAL  next_count:STD_LOGIC_VECTOR(2 DOWNTO 0);   //信号量
 BEGIN
 count_proc:PROCESS(rs,clk) IS
       BEGIN
       IF rs='0 'THEN   //rs 复位
         next_count<="000";
       ELSEIF(clk'EVENT AND clk='1')THEN //clk有事件发生并且clk的值为1,即上升沿
         CASE next_count IS
            WHEN "000"=>next_count<="001";
            WHEN "001"=>next_count<="011";
            WHEN "011"=>next_count<="111";
            WHEN "111"=>next_count<="110";
            WHEN "110"=>next_count<="100";
            WHEN "100"=>next_count<="000";
            WHEN OTHERS=>next_count<="XXX";//XXX不确定
            END CASE;
           END IF;
           count_out<=next_count AFTER 10ns;
          END PROCESS count_proc;
END ARCHITECTURE behav;

上例是对计数器工作模型的描述。当程序仿真通过以后,说明六进制计数器模型是正确的。
在此基础上再改写程序,使其语句表达式易于用逻辑元件来实现,这是第二层次所要做的工作。
第二层次:RTL方式描述
又称寄存器传输描述(数据流描述)
导出系统的逻辑表达式,进行逻辑综合
举例——六进制计数器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用仿真工具对RTL方式描述的程序进行仿真,如果通过这一步仿真
第三层次:逻辑综合
利用逻辑工具将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)
在这里插入图片描述
在这里插入图片描述
一个比较简单的系统是不必经历上述的每一步的
利用VHDL语言设计系统硬件的方法具有以下特点
1.采用自上至下(Top Down)的设计方法
2.系统可大量采用ASIC芯片
3.采用系统早期仿真
4.降低了硬件设计的难度
5.主要设计文件使用HDL语言编写的程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于CH57X芯片的温湿度检测系统程序设计代码示例: ```C #include <stdio.h> #include <ch57x_common.h> #include <ch57x_uart.h> #include <ch57x_timer.h> #include <ch57x_adc.h> #define UART_BAUDRATE 9600 void uart_init() { UART_InitTypeDef uartInitStruct; UART_StructInit(&uartInitStruct); uartInitStruct.UART_BaudRate = UART_BAUDRATE; UART_Init(UART1, &uartInitStruct); UART_Cmd(UART1, ENABLE); } void timer_init() { TIMER_InitTypeDef timerInitStruct; TIMER_StructInit(&timerInitStruct); timerInitStruct.TIMER_Mode = TIMER_Mode_FreeRun; timerInitStruct.TIMER_CountMode = TIMER_CountMode_Down; timerInitStruct.TIMER_ClockSource = TIMER_ClockSource_LRC; timerInitStruct.TIMER_Prescaler = 1000; timerInitStruct.TIMER_Period = 65535; TIMER_Init(TIMER0, &timerInitStruct); TIMER_Cmd(TIMER0, ENABLE); } void adc_init() { ADC_InitTypeDef adcInitStruct; ADC_StructInit(&adcInitStruct); adcInitStruct.ADC_Mode = ADC_Mode_Single; adcInitStruct.ADC_Channel = ADC_Channel_0; adcInitStruct.ADC_Prediv = ADC_Prediv_2; adcInitStruct.ADC_SampleTime = ADC_SampleTime_1_5; ADC_Init(&adcInitStruct); } int main() { uart_init(); timer_init(); adc_init(); while (1) { uint16_t adcValue = ADC_Read(); float temperature = (adcValue * 3.3 / 4096 - 0.76) / 0.0025 + 25; printf("Temperature: %.2fC\r\n", temperature); delay_ms(1000); } } ``` 该代码使用了 CH57X 的 UART、TIMER、ADC 模块,通过 ADC 模块读取温度传感器 LM35 的模拟信号,计算出当前温度,并通过 UART 模块输出到串口终端。需要注意的是,代码中的 ADC 转换结果需要根据具体的 LM35 温度传感器电路设计进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值