不使用总线矩阵的CortexM3最小系统搭建(AHB外设有ITCM,DTCM,DEFAULT_SLAVE和AHB_APB桥,APB外设只有一个UART)附整个工程

2 篇文章 4 订阅
1 篇文章 0 订阅

1.1. 实验任务:
不使用总线矩阵搭建系统,系统挂载APB_UART、AHB_SRAM等外设。
1.2. 实验所需模块
CortexM3.v -----------------------------------------顶层
cortexm3ds_logic.v -------------------------------M3内核
cmsdk_ahb_slave_mux.v ---------------------AHB外设选择
cmsdk_apb_slave_mux.v ---------------------APB外设选择
cmsdk_apb_uart.v -------------------------------APB外设UART
cmsdk_ahb_to_sram.v ------------------------AHB外设SRAM
cmsdk_ahb_to_apb.v ----------------------------AHB-APB桥
cmsdk_fpga_sram.v ----------------------------FPGA BlockRam/OnChip SRAM
cmsdk_mcu_addr_decode.v ------------------地址译码模块
cmsdk_ahb_default_slave.v---------------------AHB默认从设备
cm3_code_mux.v -------------------------------将ICODE和ICODE做MUX后输出
请添加图片描述

1.3. 实验步骤
1. 打开vivado,将文件全部添加到工程。
请添加图片描述
2. 在顶层文件中例化所有文件,其中需要对decode文件内部修改,以下是要注意的。
 在apb_slave_mux和ahb_slave_mux用参数化使能AHB和APB外设。
 将default slave设置为AHB PORT3作为缺省外设。
 将code_mux放到工程生成code_hadder给decode文件做例化使用。
 例化decode文件时,直接将sys_hsel和code_hsel定义为1,将remap_ctrl设置为0。
3. 编写约束文件。
4. 编写KEIL。
 打开keil,创建新工程,将以下C文件和启动文件添加到工程。
CortexM3_driver.c
Handler.c
Main.c
Retarget.c
System.c
startup_CM3DS.s
 修改keil设置。
 在主函数编写UART发送代码。
 软件仿真查看寄存器是否正常工作,软件仿真通过之后,把生成的hex路径添加到cmsdk_fpga_sram.v中。
在这里插入图片描述

5. Vivado行为级仿真,查看TX以及TX_buffer是否有数据变化,若有变化,则搭建成功。若没有,再去检查一下细节。

1.4 注意事项
1.首先也是最重要的,在不使用总线矩阵搭建最小系统时,译码单元要加以重视,本示例中最小系统挂载了ITCM,DTCM,UART以及一个默认外设,把UART挂到系统上要注意,必须先生成ahb_to_apb的选择信号PSEL¬_APB(这个信号还需要添加到AHB_SLAVE_MUX中),选中了ahb_to_apb之后,把ahb_to_apb这个模块生成的选择信号PSEL,给到apb_slave_mux,在经过apb_slave_mux的执行生成APB外设的选择信号PSEL_UART,这个选择信号给到UART这个模块,才能正确选中UART,才能在硬件层面上把UART挂载到系统上,并能使系统正确访问它。

2.其次,ITCM要放在code_mux下面,DTCM,UART以及默认外设要放到SYS_BUS下面,code_mux是把内核信号ICODE和DCODE进行整合的模块,它的输出要返回给内核,也要传送给DECODE和外设。

3.软件部分你可能遇见的问题,在KEIL上可以正常跑软件仿真,波特率和模式寄存器以及控制寄存器都能正常设置,函数都可以正常跳转,但把生成的HEX文件添加到硬件当中时,问题出现了,硬件无法调到主函数关于UART的部分,这就可能是有关UART的模块,存在大小写不一致的问题,有的模块是小写的uart,有的模块是大写的UART。

由下图可知,在系统总线地址(sys_haddr)为0x40000000-0x4000ffff的时候,UART被选中,而且uart_buf里也有了数据的变化,说明UART在正常发送。
在这里插入图片描述
如果前仿通过了,上板出现连接错误,很可能是你的硬件存在问题:
如出现SWD/JTAG Communication Failure
在这里插入图片描述
你需要检查一下硬件部分的调试模块,连线是否正确,用IP核生成的时钟例化是否存在问题。
如果出现No Debug Unit Device found
在这里插入图片描述
检查一下约束文件是否正确,你的引脚连接有差错也是不能上板的。
上板现象如下
在这里插入图片描述
按下复位之后,不断发送数据。
整个工程在本人主页

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值