介绍软件编程思维与硬件建模思维的不同与相似之处。
 
 
1. 软件编程思维
 
编程,意指编写程序;
程序,即过程的顺序;
 
软件程序具有天然的串行特性:
a. 汇编级别需要等前一条指令执行完成,才能执行下一条指令;
b. 语言级别需要等前一条语句执行完成,才能执行下一条语句;
c. 语言级别需要等前一个函数调用完成,才能执行下一条语句;
 
原因在于软件程序最终都会被编译为一条条汇编指令,
汇编指令执行的载体是CPU核,而在单个CPU核中汇编指令的执行是串行的;
 
CPU核是活的,而软件程序是CPU核执行的指令。
 
 
2. 硬件建模思维
 
通电之后,硬件中的每一个模块都是活的,
每个模块都同时接收输入、执行处理、产生输出。
天然具有并行的特性。
 
 
3. 对比
 
硬件各个模块都是活的,建模时需要谨慎处理各个模块的状态。
软件编程天然的串行特性,使得软件编程思维更易于使用和理解。
 
 
4. 软件建模:多线程软件模型
 
软件编程中有没有并行性需要考虑呢?
有,那就是多线程编程。
 
多线程编程假设每个线程都有可能同时并行执行,需要考虑:
a. 每个线程的任务;
b. 线程之间的通信方式;
c. 线程之间的同步关系;
 
其过程如同软件建模,建立各个线程及其交互关系的模型。
 
 
5. 众核
 
在多线程软件模型中,每个线程都是活的,如同硬件模型中的每个模块。
但是线程只是一个抽象的概念,如果要让每一个线程真正的同时活着,需要为每一个线程分配一个CPU核。
 
假设可以为每个线程分配一个CPU核,这个多线程软件模型和硬件模型之间,还有哪些不同呢?
 
1) CPU核是一个完备的通用核,而硬件模块只实现特定的处理逻辑,可以认为是一个专用核;
2) 线程之间的通信或使用互斥锁或使用信号量,而硬件模块之间通信则是电信号直通、Ready/Valid简单控制接口、或者是FIFO传递数据等;
 
 
6. 裁剪
 
虽然CPU核是通用核,但是线程的任务是有限的逻辑,可以根据线程的任务,将其所需要的CPU核进行裁剪,所得即为硬件模块。
 
线程之间的通信可以在软件模型下,建立一个仿真层以提供与硬件模块间一致的同步、通信行为。
 
在这些基础上,软件模型与硬件模型是否可以统一了呢?
 
 
7. 统一:软件建模与硬件建模
 
在线程的层次上,可以。
 
然而线程的任务并非一个简单的输入、处理、输出的函数,而是可以再分为多个模块,每个模块有其独立的功能。
 
这也简单,那就把线程内部的每一个具有独立功能的模块,都转换为一个线程。
让这些模块在线程间通过线程同步和通信机制交互,而非在线程内部利用软件编程天然的串行特性,通过函数调用交互。
 
 
至此,基于仿真层,把软件程序中每一个独立的子功能拆分成为一个线程,
构建而成的多线程软件模型,与硬件模型可以统一在一起了。
 
PS. 这就是SystemC的系统级建模(System-level modeling)的思想。
 
 
8. 最终目标是硬件模型
 
无论使用何种思维、何种方法,最终目标都是要完成硬件模型的构建。
 
1) 直接构建硬件模型
 
Verilog/VHDL等直接通过硬件思维,完成硬件模型的构建。
 
2) Generator: 提高构建层次
 
使用硬件思维,构建硬件模型;
然后在这个模型层的基础上,添加一个构建层;
 
只要落实到模型层,构建层可以使用任何方法,拥有无穷无尽的自由。
 
Verilog的generate,和Chisel的circuit generator是这一类。
 
3) Vivado HLS:思维转换
 
Vivado HLS使用软件编程思维实现算法,然后把每个函数转换为硬件模块。
其中存在一个思维转换。
 
4) SystemC METHOD实现: 思维转换
 
SystemC中的METHOD,在SystemC的语汇中是一个Process,对应着多线程软件模型中的一个线程。
其实现使用的是软件思维,依赖于软件思维的串行特性,所以也需要进行思维转换。
 
5) SystemC系统级建模:模型统一
 
SystemC系统级建模实现了软件建模与硬件建模的统一。
既可以认为建立的是软件模型,也可以认为建立的是硬件模型。
无需进行思维转换。
 
 
9. 备注
 
以下内容这里没有讨论:
a. 硬件通信的速度;
b. 硬件控制信号的响应时间较短,响应很及时;
c. 硬件模块中顺序逻辑的长度不能超过一个时钟周期;
 
 

hdl - 软件编程与硬件建模的更多相关文章

  1. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  2. Jlink 软件断点和硬件断点

    调试2440 RAM拷贝至SDRAM遇到的问题 汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行, ...

  3. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结

    Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结 Coolshell 称号.理论与c++ 阮一峰:: 理论高手与js高手 王银:理论高手 赵劼,网名老赵,c#高手 与理 ...

  4. php用什么软件编程

    准备好好学习学习PHP了吗?那么你首先应该考虑用什么开发工具(IDE).市面上有很多这类工具,收费的有,免费的也有,选择起来并不轻松. 如果你说PHP编程用基础的文本编辑软件就可以了,比如用记事本.是 ...

  5. AI:用软件逻辑做硬件爆款

    "我们的野心不止那么一点点." 百度集团副总裁.百度智能生活事业群组(SLG)总经理.小度CEO景鲲曾多次对外表达过这样的观点. 在2021年百度世界大会上,小度又一口气发布了四款 ...

  6. 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  7. 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  8. 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. [py]软件编程知识骨架+py常见数据结构

    认识算法的重要性 - 遇到问题? 学完语言,接到需求,没思路? 1.学会了语言,能读懂别人的代码, 但是自己没解决问题的能力,不能够把实际问题转换为代码,自己写出来.(这是只是学会一门语言的后果),不 ...

随机推荐

  1. 单元测试中使用Spring的ReflectionTestUtils更方便

    1 简介 ReflectionUtils是Spring中一个常用的类,属于spring-core包:ReflectionTestUtils则属于spring-test包.两者功能有重叠的地方,而Ref ...

  2. Spring官网阅读(八)容器的扩展点(三)(BeanPostProcessor)

    在前面两篇关于容器扩展点的文章中,我们已经完成了对BeanFactoryPostProcessor很FactoryBean的学习,对于BeanFactoryPostProcessor而言,它能让我们对 ...

  3. 基于SSM的健身房管理系统

    基于SSM的健身房管理系统 The project was made in 2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 项目展示 用户登录页 用户注册页 ...

  4. 字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一篇 Helloworld 中,我们初步尝试使用了 Javassist字节编程的 ...

  5. 花店橱窗布置问题(FLOWER)

    目录 问题描述 问题分析 Java代码实现 运行结果 今天老师上完课说所有花都要被放,这个算法还是考虑多了,包含了这个选择,代码就不给了,用dp思想就可以解决了. 问题描述   假设你想以最美观的方式 ...

  6. JVM-Java内存区域与内存溢出异常

    第二章:Java内存区域与内存溢出异常 2.1 运行时数据区 1:程序计数器  : 线程私有,较小的内存空间,当前线程所执行的字节码的行号指示器,唯一不会发生错误的内存区域 2:虚拟机栈: 线程私有, ...

  7. VMware Centos7 桥接 DHCP无法获得IP

    问题描述 VMware Centos7 桥接模式下,虚拟机无法获得IP,无法联网 解决方案 网络设置为DHCP自动获取IP 查看主机(不是虚拟机)的相关服务是否打开,主要是VMware DHCP 这个 ...

  8. 程序员的踩坑经验总结(一):如何把Bug的偶现变必现

    程序员的踩过的坑也是可以分类的,很常见又很难解决的一类是偶然的现象,表现起来比较怪异. 而把一个问题Bug的偶现变成必现,是开发人员的一种能力.我认为也应该是测试人员的一种能力,但是各个公司要求不一样 ...

  9. kafka消费者重试逻辑的实现

    背景 在kafka的消费者中,如果消费某条消息出错,会导致该条消息不会被ack,该消息会被不断的重试,阻塞该分区的其他消息的消费,因此,为了保证消息队列不被阻塞,在出现异常的情况下,我们一般还是会ac ...

  10. 接触Ubuntu的第一周大致总结

    VB上安装,很简单,和入门的帮助,man,--help. 基础的分区,FDISK,文件系统,目录 ,LS,cd,文件操作mkdir,rm,cp等,文件查看,cat,tac,less,等,文件查找loc ...