• hdl


     
    介绍软件编程思维与硬件建模思维的不同与相似之处。
     
     
    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. 硬件模块中顺序逻辑的长度不能超过一个时钟周期;
     
     
  • 相关阅读:
    前辈的经验
    ES6 的新特性
    jQuery 事件对象的属性和方法
    ECMAScript 6 入门
    浏览器的加载与页面性能优化
    ajax 基于 jquery 简单的 ajax 请求
    浏览器加载、解析、渲染的过程
    浏览器的加载和解析的过程,以及如何加快 HTML 的加载速度
    【经典问题】当你输入一个网址的时候,实际会发生什么?
    总结 IE 下的一些 BUG
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10248639.html
Copyright © 2020-2023  润新知