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