硬件编程语言

硬件画板说白了就是电气的连接,相较于PCB连接在2.5D中完成(有些大佬们是直接3D设计)考虑的东西会更多,原理图的抽象使得硬件思路更加简单。

就算是这样, 增加到上千门器件后的大工程是非常难以进行的编辑和检查的, 而如今的逻辑门等芯片电路规模都快上千亿级别了,这个规模已经不是人的两只眼睛或者一个团队能够用原理图来表示出来的。

于是 硬件语言verilog 和VHDL 就出现了,是相对于传统原理图这可以完成上万门元件的电路设计了, 上亿门元件的布局一个团队能够完成,上百亿千亿的功能,一个精英团队可以触及,但是任然是非常困难跨过这个极限带来的门坎。

module counter10(
        //端口定义
        input                   rstn,   //复位端,低有效
        input                   clk,    //输入时钟
        output [3:0]    cnt,    //计数输出
        output                  cout);  //溢出位
        reg [3:0]               cnt_temp ;      //计数器寄存器
        always@(posedge clk or negedge rstn) begin
                if(! rstn)begin         //复位时,计时归0
                        cnt_temp        <= 4'b0 ;
                end
                else if (cnt_temp==4'd9) begin  //计时10个cycle时,计时归0
                        cnt_temp        <=4'b000;
                end
                else begin                                      //计时加1
                        cnt_temp        <= cnt_temp + 1'b1 ; 
                end
        end
        assign  cout = (cnt_temp==4'd9) ;       //输出周期位
        assign  cnt  = cnt_temp ;                       //输出实时计时器
endmodule

于是工程师们引进了类似Java的 Chisel 语言,引入对象,多态等思路对硬件逻辑描述更加友善, 一个团队基本可以轻松胜任上百亿门的元件的功能描述。

class SortBlock extends Component() {
   
	override val io = new Bundle() {
   
		val in1 = new IoSortBlockOut()
		val in2 = new IoSortBlockOut()
		val out = new IoSortBlockOut()
	}
...
}

个人人为, 既然都涉及到高级语言了, 为啥不搞到python。
我们知道c,java这些虽然脱离了底层硬件描述的重复工作,但是还是没有完全脱离内存和数据的绑定。

而python目前在内存处理这块更加友善, 所以我打算尝试以下一门新的硬件语言的设计,而不是像MyHDL这样需要语言去描述硬件,不能带来逻辑上的极致。

MyHDL 程序风格:

from myhdl import *

@block
def dff(q, d, clk):

   @always(clk.posedge)
   def logic():
       q.next = d

   return logic

比如上边的模块 ,我可以优化到下面更加简洁描述:

# rstn 复位端,低有效
# clk 输入时钟
def counter10(rstn, clk):
    cnt_temp = reg(3)    #计数器寄存器
    with posedge(clk) or negedge(rstn): # always
        if not rstn:        #复位时,计时归0
            cnt_temp <= 0
        elif cnt_temp==9:  #计时10个cycle时,计时归0
            cnt_temp <= 0
        else:                               #计时加1
            cnt_temp <= cnt_temp + 1
    cout = (cnt_temp == 9)        #输出周期位
    cnt = cnt_temp                      #输出实时计时器
    return cnt, cout # 计数输出 溢出位

这里说明以下, 大家都很优秀,文章中的任何说明,都是大家的成果, 我只是在大家的思路上,前人的经验上, 提出一点思路,供大家探讨。


参考:

相关推荐

  1. 硬件编程语言

    2023-12-19 18:54:02       46 阅读
  2. 【QT教程】QT6硬件数据库编程 QT硬件数据库

    2023-12-19 18:54:02       10 阅读
  3. 【QT教程】QML异构硬件编程

    2023-12-19 18:54:02       58 阅读
  4. C++嵌入式编程硬件控制与物联网

    2023-12-19 18:54:02       36 阅读
  5. 【QT教程】QT6_QML与硬件交互编程

    2023-12-19 18:54:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 18:54:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 18:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 18:54:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 18:54:02       20 阅读

热门阅读

  1. json-server详解

    2023-12-19 18:54:02       40 阅读
  2. 解决matplotlib中文显示乱码

    2023-12-19 18:54:02       45 阅读
  3. 面试题,手写soft_nms

    2023-12-19 18:54:02       44 阅读
  4. 音频筑基:瞬态、基音、偏噪信号类型分析

    2023-12-19 18:54:02       37 阅读
  5. 2312d,D语言单元测试等

    2023-12-19 18:54:02       51 阅读
  6. == 和 equals 的区别

    2023-12-19 18:54:02       37 阅读
  7. Postman中raw是什么

    2023-12-19 18:54:02       34 阅读
  8. ansible

    ansible

    2023-12-19 18:54:02      33 阅读
  9. Spring 框架中都用到了哪些设计模式?

    2023-12-19 18:54:02       50 阅读