微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如果用逻辑电路来而非CPU来实现循环发送命令,什么方式比较好?

如果用逻辑电路来而非CPU来实现循环发送命令,什么方式比较好?

时间:10-02 整理:3721RD 点击:
现在很多电路设计中都会遇到对外围芯片发送命令的要求,例如设计SDRAM控制器或者I2C控制器等等。
按我理解,发送命令通常有两种方式:
一种是用逻辑电路作为协议接口,然后定义一组寄存器作为命令寄存器,CPU向命令寄存器中写入命令,逻辑电路将这组命令按照协议要求发送出去,并读取响应存入响应接收寄存器供CPU读取;
另一种就是在逻辑电路中用状态机实现命令的发送,这种方式,如果命令种类少,可以直接让每种命令对应状态机的一个状态,状态机在哪种状态则发送相应的命令,例如SDRAM的控制,但是如果命令种类比较多,例如SD/MMC卡的命令,如果还用这种方式,那么状态机的状态会比较复杂,冗余较多,我有一种想法,大家帮忙看看有什么好处和坏处:
以我现在在做的SD卡的控制接口为例,SD卡的初始化发送命令流程是固定的,那么我可以把所有需要的命令按一定顺序存在一个命令ROM中,其中初始化命令按照规范的顺序存放,初始化流程开始后开始发送第一条命令,命令执行完后判断响应是否正确,如果正确地址指针加1,指向下一条命令,否则重新发送当前地址存放的命令,初始化完成之后,地址指针停留在一个特殊地址Addr_invld,该地址中存放的是无效命令,如果外部有读写等请求,则地址指针跳向存放相应命令的地址,正确执行完成之后返回Addr_invld。这样我只需要在适当时刻判断SD卡返回的命令响应,而无需庞大的状态机来进行控制。感觉这种方式有点像CPU的指令执行机构从指令池取指的操作。

你的最后一种做法是很好的,比较节省逻辑单元,如果不用CPU ,你的这种方法是首选

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top