从Keil迁移到SDCC 当前,在单片机开发领域,Keil是广泛被采用的开发工具。然而,其编辑器功能相较于现代的VScode显得相当陈旧和不足。过去,我也曾试验过使用platformIO,其核心理念是对SDCC和stcgal进行封装,从而提供一个更加集成的开发环境。现在,我们将基于SDCC和stcgal来搭建一个全新的单片机开发环境。我们将现有代码从Keil迁移到SDCC,确保原有的Keil代码能够在新环境中顺畅运行。
perl使用find函数踩坑 写了一个脚本可以同时检查多个仿真log文件,并生成html表格。按照文件修改时间从新到旧排序。然后一直无法使用stath函数获取ctime。find函数会改变程序执行的当前目录函数是在$dir目录下运行的。
在systemverilog中使用断言(assert)进行复位检查 考虑以下场景:复位触发后,需要检查端口信号或内部关键信号是否被正确复位。复位的验证不应该依赖于某个特定的case, 应该贯穿验证的整个阶段。的检测,用于判断复位触发时,端口信号是否是复位值。推荐使用断言进行复位检查。
vcs\verdi三步编译VIVADO库 使用vcs仿真带vivado的IP的设计的时候,经常需要联合编译,vivado的库有的是VHDL文件,这时又需要vcs进行三步编译。VCS三步编译是将两步编译的第一步,拆分成了Analysis+Elaboration,这样做的好处是可以编译VHDL文件。若使用一条命令编译源文件和uvm环境,则uvm环境会默认在最后开始编译,这就导致前面编译源文件的时候会报错,所以。我们刚才使用vivaod生成了一个synopsys_sim.setup文件,该文件主要指定了Xilinx的库。文件的时候,才会使用三步编译。
数字二倍频电路 以异或门为例进行分析。t0时刻:Q=0;此时clk_o = clk ^ Q = clk ^ 0 = clk;t1时刻:clk 时钟上升沿来临,传递到寄存器时钟端。clk_o 拉高,寄存器状态更新。Q=1;t2时刻:Q=1的状态传递到寄存器的时钟端。此时clk 仍然处于高电平状态。clk_o开始拉低。触发器状态不更新。所以clk_o的高电平持续时间就是t2-t1。t3时刻:clk 下降沿来临,此时clk_o = clk ^ Q = clk ^ 1 = ~clk;......
DCM和PLL和MMCM的差别 前言之前移植接触的都是Xilinx7系列的板子。项目需要使用Xilinx5系列的板子,两者的时钟单元不一样。在网上搜集了一些资料,总结一下DCM\PLL\MMCM之间的差别。环境无正文 在 Xilinx FPGA 中,时钟管理器称为时钟管理,简称 CMT。我们使用的DCM /PLL/MMCM都包含在CMT中。 DCM是旧技术,在Spartan-3和Virtex-4系列中使用。Spartan-6和 Virtex-5系列同时使用PLL和DCM。在Virtex-6系列中开始使用MMCM,且V
镁光nor flash 开源控制器调教记录 前言 懒癌发作,项目早就结束了。但是一直不想写。😄先占个坑,以后再写完整。 项目需要用到一个镁光的flash,需要一个开源的qspi-flash控制器,连接到CPU上作为CPU外设。感谢开源qspi-flash 控制器已经提供了比较完善的架构。我需要做的主要有:根据flash型号的差别迁移flash 的指令根据项目需要将控制器的ahb接口转接到apb接口迁移原项目中使用的IP,看不到源代码的IP都要被替换替换项目中的存储器ram,与公司项目整体保持一致搭建仿真环境,上板验证。
开源APB2WisnBone UART IP 的使用 前言项目需要使用一个较为完成的UART IP。OpenCores有不少开源的UART IP。但是大多是WishBone总线,项目接口时APB,需要进行一个转换。而且项目使用的IP需要有源码。Github 上WishboneAXI和wb2axip这两个项目都可以进行转换。其中WishboneAXI是以Xilinx IP的形式提供的,使用非常方便。但是我在使用WishboneAxI的时候Vivado仿真失败。最后还是决定自己写一个APB 到 WishBone的总线转换。学习工程中的一大困扰就是网上的资
ARM 外部中断的过程 前言ARM的中断和51单片机的中断有不少不同的地方,这里梳理一下ARM外部中断的实现过程。环境ARM单片机:公司设计的EM537单片机ARM指令集型号:V7-A正文一、ARM中断类型首先参考《ARM体系结构与编程》第九章异常中断处理章节中的内容。ARM中断可以分为以下几种类型:ARM中断向量的地址和优先级表格ARM共有8种类型的中断,中断的数目可以扩展。EM537中通过TZIC模块,将IRQ中断数目扩展至128。FIQ的中断,优先级高,延迟低。常用于DMA类型的中断。我
51学习(2):vscode+ Embedded IDE开发环境搭建 前言platformIO虽然可以用于编译8051,但是修改头文件包含路径,以及编译器选项都较为麻烦。Embedded IDE界面类似Visual Studio,设置较为方便。环境单片机:普中-STC89C516RD+正文一,安装Embedded IDE和SDCC编译器platformIO使用的也是SDCC编译器,但是Embedded IDE需要自己下载安装SDCC编译器下载安装SDCC编译器:sdcc官方网页sdcc-4.1.0-x64-setup.exeEmbedded ID
51学习(1):vscode+platformIO 开发环境搭建 前言目前单片机开发大都使用Keil。但是Keil的编辑器很落后,和VScode比差远了。今天用vscode+platformIO插件搭建单片机开发环境。环境单片机:普中-STC89C516RD+正文一,安装vscode 和 platform点击链接下载安装vscode: vscode官方下载地址vscode 搜索安装 PlatformIO IDE安装时间较长二,platform 使用可以设置板子型号stc89c52。板子的型号并不重要,因为型号决定板子支持的下载方式,支
嵌入式学习 1 安装 qemu1.1 命令wget https://download.qemu.org/qemu-6.2.0.tar.xztar xvJf qemu-6.2.0.tar.xzcd qemu-6.2.0./configure --target-list=arm-softmmu,arm-linux-user --enable-debugmake1.2 报错与修复1.2.1 ERROR: Cannot find Ninjasudo apt-get install ninja-build
解决嵌入式arm编译除法,报error:__umodsi3和__udivsi3的问题 这里写自定义目录标题前言问题1:不支持除法问题2:bl跳转问题问题3:no memory region specified for参考文献前言SOC原型验证,编译程序的时候遇到不支持除法的问题。网上没有一个方便的解决方法,我利用sed替换实现了一个好一点的方法。文章以遇到问题的顺序来记录。问题1:不支持除法这个问题的乐音还是比较简单的,网上讲的很清楚,arm是精简指令集,本身不支持除法需要调用第三方的库软件实现。这里调用lgcc的库,需要再连接的时候加上,如下图所示。这里-l 后面加库名gcc
FRP反向代理 连接内网服务器上的jupyter 前言服务器只能校内登录,现在都在校外实习挺麻烦的。利用FRP可以反向代理,然后利用SSH端口映射。不用新开端口就可以直接访问jupyter notebook。文章目录前言FRP反向代理公网中继服务器端内网服务器端外网客户端参考文献FRP反向代理公网中继服务器端编辑配置文件 frps.ini[common]bind_port = 7000运行命令nohup ./frps -c frps.ini &内网服务器端编辑配置文件frpc.ini[common]server_add
模块深层调用-避免端口层层穿出的两种方法 前言有的时候,比如设计中调用了DDR。DDR控制器的芯片相关的端口需要连接到管脚上,如果一路穿出来的话太麻烦。然后就想能不能不用引出利用IP约束直接在内部绑定到管脚。约束文件顺序首先IP约束的优先级高于用户约束,IP约束里面的设置可以覆盖用户里面的设置。...