vhdl关于case的问题
在verilog中的程序case(init_state_r)I_NOP:init_state_r<=done_100us?I_PRE:I_NOP;--上电复位后200us...
在verilog中的程序
case(init_state_r)
I_NOP: init_state_r <= done_100us ? I_PRE:I_NOP;--上电复位后200us结束则进入下一状态
I_PRE: init_state_r <= (TRP_CLK == 0) ? I_AR1:I_TRP;--预充电状态
I_TRP: init_state_r <= (end_trp) ? I_AR1:I_TRP;--预充电等待TRP_CLK个时钟周期
I_AR1: init_state_r <= (TRFC_CLK == 0) ? I_AR2:I_TRF1;--第1次自刷新
I_TRF1:init_state_r <= (end_trfc) ? I_AR2:I_TRF1;--等待第1次自刷新结束,TRFC_CLK个时钟周期
I_AR2: init_state_r <= (TRFC_CLK == 0) ? I_AR3:I_TRF2; --第2次自刷新
I_TRF2:init_state_r <= (end_trfc) ? I_AR3:I_TRF2; --等待第2次自刷新结束,TRFC_CLK个时钟周期
I_AR3: init_state_r <= (TRFC_CLK == 0) ? I_AR4:I_TRF3; --第3次自刷新
I_TRF3:init_state_r <= (end_trfc) ? I_AR4:I_TRF3;--等待第3次自刷新结束,TRFC_CLK个时钟周期
I_AR4: init_state_r <= (TRFC_CLK == 0) ? I_AR5:I_TRF4; --第4次自刷新
I_TRF4:init_state_r <= (end_trfc) ? I_AR5:I_TRF4; --等待第4次自刷新结束,TRFC_CLK个时钟周期
I_AR5: init_state_r <= (TRFC_CLK == 0) ? I_AR6:I_TRF5; --第5次自刷新
I_TRF5:init_state_r <= (end_trfc) ? I_AR6:I_TRF5;--等待第5次自刷新结束,TRFC_CLK个时钟周期
I_AR6: init_state_r <= (TRFC_CLK == 0) ? I_AR7:I_TRF6; --第6次自刷新
I_TRF6:init_state_r <= (end_trfc) ? I_AR7:I_TRF6;--等待第6次自刷新结束,TRFC_CLK个时钟周期
I_AR7: init_state_r <= (TRFC_CLK == 0) ? I_AR8:I_TRF7; --第7次自刷新
I_TRF7: init_state_r <= (end_trfc) ? I_AR8:I_TRF7;--等待第7次自刷新结束,TRFC_CLK个时钟周期
I_AR8: init_state_r <= (TRFC_CLK == 0) ? I_MRS:I_TRF8;--第8次自刷新
I_TRF8:init_state_r <= (end_trfc) ? I_MRS:I_TRF8;--等待第8次自刷新结束,TRFC_CLK个时钟周期
I_MRS:init_state_r <= (TMRD_CLK == 0) ? I_DONE:I_TMRD;--模式寄存器设置(MRS)
I_TMRD:init_state_r <= (end_tmrd) ? I_DONE:I_TMRD;--等待模式寄存器设置完成,TMRD_CLK个时钟周期
I_DONE:init_state_r <= I_DONE;-- SDRAM的初始化设置完成标志
default: init_state_r <= I_NOP;
end case
想移植到VHDL中,可是VHDL没法用类似的多路选择器,例如init_state_r <= done_100us ? I_PRE:I_NOP。
难道要都写成if语句吗,求大神回答,积分不多了,就这些了 展开
case(init_state_r)
I_NOP: init_state_r <= done_100us ? I_PRE:I_NOP;--上电复位后200us结束则进入下一状态
I_PRE: init_state_r <= (TRP_CLK == 0) ? I_AR1:I_TRP;--预充电状态
I_TRP: init_state_r <= (end_trp) ? I_AR1:I_TRP;--预充电等待TRP_CLK个时钟周期
I_AR1: init_state_r <= (TRFC_CLK == 0) ? I_AR2:I_TRF1;--第1次自刷新
I_TRF1:init_state_r <= (end_trfc) ? I_AR2:I_TRF1;--等待第1次自刷新结束,TRFC_CLK个时钟周期
I_AR2: init_state_r <= (TRFC_CLK == 0) ? I_AR3:I_TRF2; --第2次自刷新
I_TRF2:init_state_r <= (end_trfc) ? I_AR3:I_TRF2; --等待第2次自刷新结束,TRFC_CLK个时钟周期
I_AR3: init_state_r <= (TRFC_CLK == 0) ? I_AR4:I_TRF3; --第3次自刷新
I_TRF3:init_state_r <= (end_trfc) ? I_AR4:I_TRF3;--等待第3次自刷新结束,TRFC_CLK个时钟周期
I_AR4: init_state_r <= (TRFC_CLK == 0) ? I_AR5:I_TRF4; --第4次自刷新
I_TRF4:init_state_r <= (end_trfc) ? I_AR5:I_TRF4; --等待第4次自刷新结束,TRFC_CLK个时钟周期
I_AR5: init_state_r <= (TRFC_CLK == 0) ? I_AR6:I_TRF5; --第5次自刷新
I_TRF5:init_state_r <= (end_trfc) ? I_AR6:I_TRF5;--等待第5次自刷新结束,TRFC_CLK个时钟周期
I_AR6: init_state_r <= (TRFC_CLK == 0) ? I_AR7:I_TRF6; --第6次自刷新
I_TRF6:init_state_r <= (end_trfc) ? I_AR7:I_TRF6;--等待第6次自刷新结束,TRFC_CLK个时钟周期
I_AR7: init_state_r <= (TRFC_CLK == 0) ? I_AR8:I_TRF7; --第7次自刷新
I_TRF7: init_state_r <= (end_trfc) ? I_AR8:I_TRF7;--等待第7次自刷新结束,TRFC_CLK个时钟周期
I_AR8: init_state_r <= (TRFC_CLK == 0) ? I_MRS:I_TRF8;--第8次自刷新
I_TRF8:init_state_r <= (end_trfc) ? I_MRS:I_TRF8;--等待第8次自刷新结束,TRFC_CLK个时钟周期
I_MRS:init_state_r <= (TMRD_CLK == 0) ? I_DONE:I_TMRD;--模式寄存器设置(MRS)
I_TMRD:init_state_r <= (end_tmrd) ? I_DONE:I_TMRD;--等待模式寄存器设置完成,TMRD_CLK个时钟周期
I_DONE:init_state_r <= I_DONE;-- SDRAM的初始化设置完成标志
default: init_state_r <= I_NOP;
end case
想移植到VHDL中,可是VHDL没法用类似的多路选择器,例如init_state_r <= done_100us ? I_PRE:I_NOP。
难道要都写成if语句吗,求大神回答,积分不多了,就这些了 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
VHDL也有多路选择器啊,when...语句就可以啦。
追问
第一句改成
case init_state_r is
when I_NOP => init_state_r <= I_PRE when done_100us = '1'
<=I_NOP when done_100us = '0'
吗?这样这么多when编译能不能通过呀
追答
可以啊。为啥不行。你看看case when的语法,只要语法正确就能通过。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询