最近还在研究SWD协议,前面一篇文章中我们已经讲到了SWD的基本协议,这篇文章我们来看一下这个协议的一个硬件实现。本次硬件设计采用Verilog,因为Verilog也已经扔下了很久了,所以代码质量一般,也没有做什么测试,这里只是简单的看了一下输出的波形,其它的暂时没有关心。设计的总体思路实际上整个SWD协议还是非常简单的,硬件实现也是通过简单的状态机就可以实现,这里也刚好回顾一下状态机的写法...
我的代码我做主
最近还在研究SWD协议,前面一篇文章中我们已经讲到了SWD的基本协议,这篇文章我们来看一下这个协议的一个硬件实现。本次硬件设计采用Verilog,因为Verilog也已经扔下了很久了,所以代码质量一般,也没有做什么测试,这里只是简单的看了一下输出的波形,其它的暂时没有关心。设计的总体思路实际上整个SWD协议还是非常简单的,硬件实现也是通过简单的状态机就可以实现,这里也刚好回顾一下状态机的写法...
SWD全称Serial Wire Debug,是ARM为嵌入式设备推出的一种简单的调试接口,这种接口通过一条双向数据线和一条时钟线实现对于ARM核心的调试。在SWD协议中,总线上主要有以下三个阶段:Packet Request,这个阶段表示外部调试器向Debug Port(DP)发送请求。Acknowledge Response,这个阶段是设备向调试器返回应答信号。Data Transfer...
我们知道现在很多芯片里面都会有一个fuse的模块,通过fuse我们可以来定义芯片的生命周期,保存相关的秘钥等等,可以说fuse是芯片安全的一个基础,fuse虽然简单,但是至关重要,我们在芯片前期进行FPGA验证的时候,也需要在FPGA上实现FUSE的功能,但是FPGA本身并没有FUSE,所以我们还是要通过SRAM来模拟FUSE。这次发现的问题就是FUSE模拟的时候出来的一个问题,在实际芯片中...
在ASIC设计中,我们经常会用到FPGA来做一些流片之前的芯片测试,这个时候我们就需要将我们的Design porting到FPGA平台上来,一般我们都要手动将设计中的模拟模块去除,简化时钟设计,尽量减少门控时钟数量,毕竟FPGA并不喜欢门控时钟。还有一个比较大的改动就是padring,因为ASIC设计中,pad往往会有很多模拟相关的设计,比如ESD等东西,这个FPGA一般是无法支持的,所以...
最近在做一个关于RISCV嵌入式项目的开发,RISCV平台用的是一个picorv32的一个开源小核,代码只有不到三千行,但是功能基本完备,非常适合在FPGA中做一些和控制相关的操作。为了程序开发方便,我在编译CPU程序的时候,直接使用了newlib来实现一些标准的C库程序,这样虽然程序效率不高,好在常用的C库程序不需要单独开发,我们只需要将我们的精力集中在应用程序开发上就好,并且在程序测试的...