主讲老师:William、YVONNE
请使用
支付宝或微信支付 扫码支付
你还没登陆!请先登陆后再操作
¥25800
《FPGA 精品课》
知识库录播课
直播授课和直播辅导
精品就业服务包
知识库录播课
直播授课和直播辅导
精品就业服务包
有效期1年
¥11800
《FPGA VIP课程》
知识库录播课
一周一次直播答疑
就业服务包
知识库录播课
一周一次直播答疑
就业服务包
有效期1年
¥6900
《FPGA 基础课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
¥7999
《RISC-V 专业系统课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
¥7999
《IC设计 数字IC课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
¥7999
《IC设计 模拟IC课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
¥7999
《IC设计 数字电路课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
¥399
《PCB 普惠课》
知识库录播课
论坛答疑
知识库录播课
论坛答疑
有效期1年
学习本节课后有几点收获,1、DTCM由二维数组实现 reg [31:0] mem_r [0:1023] ;2、DTCM用于存放数据、函数中的压栈推栈、临时变量(定义 int i);3、巧妙运用参数传递的方式,修改sram中的深度和位宽;4、addr_r <= addr,未来需要综合为ip核时需要,因为双端口ram的读取会延时1个clk;
在听课中遇到一个问题,请老师解答:
1、wire [MEM_ADDR_W-1:0] addr_mem = {addr[31:2]}; 这句代码的右边是将32bit的addr地址截取了30bit,赋值给左侧的addr_mem,那么32bit的addr_mem此时获得的值是 {2'b00,addr[31:2]},相当于是在高位补2个0,但是,如果在高位补0的话,那么这个地址好像就不能正确表示DTCM地址了。所以,我感觉正确的赋值方式应该是wire [MEM_ADDR_W-1:0] addr_mem = {addr[31:2],2'b00}; 这样在后面补2个0,才是正确的,请问老师我分析的对吗?
这里之所以将{addr[31:2]}赋值给addr_mem,是因为在处理DTCM数据时以4个字节(32-bit)为单位。为了方便,可以省略寻址时的xx0,xx4,xx8,xxc(都是16进制的地址),将其后两位截掉({addr[31:2]},或者说是除以4),变为xx0,xx1,xx2,xx3。
好的,谢谢老师!