状态机的奇怪问题

[复制链接]
2731|0
 楼主| eastbest 发表于 2007-4-11 16:47 | 显示全部楼层 |阅读模式
初学FPGA,在写一个UART的接收代码,用的是3段式写法;遇到一个奇怪的现象:明明使用了default语句,可状态机一直停留在非法的状态。试着把状态机输出到FPGA引脚观测它的状态,UART居然又正常了!<br />另:用的是xilinx&nbsp;spartan2&nbsp;,&nbsp;ISE6.3<br />各位熟悉FPGA的兄弟指点一下!<br /><br />module&nbsp;uart(Rxd,ledout,clk,monitor);<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;Rxd;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;[7:0]&nbsp;ledout;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;clk;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;[10:0]&nbsp;monitor;<br /><br />...<br />...<br /><br />always@(posedge&nbsp;clk)<br />if(Baud16Tick)<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;CS&nbsp;&lt=&nbsp;NS;<br />&nbsp;&nbsp;&nbsp;&nbsp;pulse&nbsp;&lt=&nbsp;~pulse;<br />end<br /><br /><br />always@(CS&nbsp;or&nbsp;...)<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;case(CS)<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_IDLE:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_START:&nbsp;...&nbsp;NS&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT0:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT1:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT2:&nbsp;&nbsp;...&nbsp;NS&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT3:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT4:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT5:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT6:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT7:&nbsp;&nbsp;...&nbsp;NS&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_STOP:&nbsp;&nbsp;...&nbsp;NS&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;NS&nbsp;=&nbsp;RX_IDLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;endcase&nbsp;<br />end<br /><br /><br />always@(CS)<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;case(CS)<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_IDLE:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0000;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_START:monitor_reg&nbsp;=&nbsp;4'b0001;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT0:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT1:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT2:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT3:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT4:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT5:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT6:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_BIT7:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0010;<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_STOP:&nbsp;monitor_reg&nbsp;=&nbsp;4'b0100;<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;monitor_reg&nbsp;=&nbsp;4'b1000;&nbsp;&nbsp;&nbsp;&nbsp;(把编译好的代码下载到FPGA后,monitor_reg输出1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;endcase<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;monitor_reg&nbsp;=&nbsp;CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(去掉上面的case部分,保留这句,则UART正常运行)<br />end<br /><br /><br />assign&nbsp;ledout&nbsp;=&nbsp;~RxBuffer;<br />...<br /><br /><br />endmodule<br /><br /><br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

176

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部