有了第一篇文章的基础,现在我们来分析一个问题:假设某个FPGA的32位寄存器,我们打算用第一篇文章那样的结构体位域的形式来实现对该寄存器的读写。跟第一篇的内容类似,基本上就是结构体的声明不同,当在我们自己的PC机上测试,编译,执行,结果都没有问题。但是在FPGA上放起来时,却发现结果总是不正确。因为要用该结构体来访问寄存器,下面假定FPGA的32位寄存器地址是宏FPGA_REG_ADDR代表的地址:
PC代码如下:
FPGA代码:
本文探讨了在FPGA中使用C语言结构体位域操作32位寄存器时遇到的问题。PC上执行正确,但FPGA上由于其32位编址特性导致数据丢失。解决方案涉及使用共用体以适应FPGA的内存访问方式。位域结构体在提供便利和注释的同时,也可能引发问题。
有了第一篇文章的基础,现在我们来分析一个问题:假设某个FPGA的32位寄存器,我们打算用第一篇文章那样的结构体位域的形式来实现对该寄存器的读写。跟第一篇的内容类似,基本上就是结构体的声明不同,当在我们自己的PC机上测试,编译,执行,结果都没有问题。但是在FPGA上放起来时,却发现结果总是不正确。因为要用该结构体来访问寄存器,下面假定FPGA的32位寄存器地址是宏FPGA_REG_ADDR代表的地址:
PC代码如下:
FPGA代码:
2123

被折叠的 条评论
为什么被折叠?