笔记:soc最小系统(软硬件协同仿真)–插桩&hello
0.环境配置:quartus2 15.0+Modelsim10.4+keil5
1.插桩
功能:在完成最小系统的设计后,简单测试数据是否能够写入寄存器,以及uart能否打印hello
实现:先在keil和quartus2分别设计好软硬件工程,再将keil产生的bin/hex文件读到最小系统的sram中,最后通过Modelsim仿真查看波形与打印字符。
1.1 soc最小系统架构连接解析
下图是一个soc系统的结构图,我们即将按照这个架构连接soc中各个模块。
busmatrix 开启了三个端口(有3个slave),
在下面的代码中,slave0连接了sram,
slave1连接了ahb2apb,
apb连接上之后,开启apb的端口使能,apb有自己的slave,开启多选一选通器
uart挂在apb上,
CM3DS_MPS2.h文件Peripheral memory map 外设存储器映射定义了各个部分不同的位置定义
这里UART地址=0x40000000UL(apb_base)+0x4000UL
apb选通了psel4来挂。将各信号连接
2.最小系统仿真流程与现象
软件部分:添加头文件 底层驱动 库函数 主函数等 。keil配置环境后构建系统
不要在这里直接生成hex文件
用仿真器模拟debug
在此处配置即将写入数据的起始memory地址
fromelf.exe --vhx --8x1 --output=.\output\outfile.hex .\hello.axf
在这里生成outfile.hex文件,之后在tcl的sram中写入
#include "CM3DS_MPS2.h"
#include <stdio.h>
#include "uart_stdout.h"
int main (void)
{
uint32_t* addr;
addr = ((uint32_t*) 0x00009000UL);
*addr = 0x12345678;
addr = ((uint32_t*) 0x0000a000UL);
*addr = 0x87654321;
// UART init
UartStdOutInit();
printf("Hello world\n");
printf("** TEST PASSED **\n");
// End simulation
UartEndSimulation();
return 0;
}
上图是keil主函数,他有两个功能,
a. 插桩:在地址为0x00009000UL的位置上写入0x12345678,
b. uart功能开启,打印hello word和test passed
在该模块memfile写入产生的hex数据 “软件”即可在“硬件”中运行。
下图是定义在该模块下的仿真块,它的作用是通过位宽计算memory的大小,首先将寄存器内的数据都清零,然后将32位的软件数据分到4个8位的ram中(即实现一个memory读取的hex文件的操作)
`ifndef SIMULATION
integer i;
localparam MEM_SIZE = 2**(AW+2);
reg [7:0] fileimage [0:((MEM_SIZE)-1)];
initial begin
// Initialize memory content to avoid X value on bus
for (i = 0; i <= AWT; i=i+1)
begin
BRAM0[i] = 8'h00;
BRAM1[i] = 8'h00;
BRAM2[i] = 8'h00;
BRAM3[i] = 8'h00;
end
`ifndef RAMPRELOAD_SPI
// Simulation
$readmemh(MEMFILE, fileimage);
// Copy from single array to splitted array
for (i=0;i<(MEM_SIZE/4); i= i+1)
begin
BRAM3[i] = fileimage[i*4+3];
BRAM2[i] = fileimage[i*4+2];
BRAM1[i] = fileimage[i*4+1];
BRAM0[i] = fileimage[i*4];
end
`endif // RAMPRELOAD_SPI
end
`endif // SIMULATION
modulsim仿真可得log如下图片打印出uart print的数据
图中UART0 TDX已经成功传输了内容
文章来源:https://www.toymoban.com/news/detail-432025.html
for循环里面的变量cnt你可以改为用integer定义,reg定义的好像不行,
尽量不要使用for语句,可以改为if语句,i,j的大小为if后的判定语句
//************************************************************************************
说明:
1 代码可到我主页免费下载
2 代码仅用于学习交流使用文章来源地址https://www.toymoban.com/news/detail-432025.html
到了这里,关于笔记:soc最小系统(软硬件协同仿真)--插桩&hello的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!