串口在调试代码的时候,打印信息很方便,MCU,DSP,ARM,都是集成的串口控制器,向SBUF写数据,然后启动发送,就是可以开始发送数据了,但是FPGA没有这个集成的串口控制器,这就需要我们自己模拟IO来实现的,接下来我们具体谈谈。http://bbs.ednchina.com/BLOG_ARTICLE_219306.HTM,这是网友博客的地址,对串口讲的很经典,是FPGA实现串口的东西,很好,我就是参考他的代码,在这里表示感谢了,
这位网友给出的代码是串口调试助手发送一个字节数据到FPGA,然后FPGA将该字节返回给串口调试助手。
我用的功能需要连续发送16bit的数据,也就是说,每次启动串口发送,都是发送2个字节数据,只要TxD_start输入一定频率的矩形波,就是连续将16bit数据发送出去了。
看代码,我在网友的代码上修改的。
Data2uart是要发送的数据,data2是发送频率,我用KEY2来触发的。这是top层代码。
下面,我们看看async_transmitter里面我修改了什么,下面标红的代码,就是我添加的,没有什么难度,都可以看懂的,不多说了,这里还是要谢谢那个位网友。CLK时钟为50MHZ,波特率115200.
reg [1:0]counter;
always @(posedge clk)
if(TxD_ready & TxD_start & (counter<2)) TxD_dataReg <= TxD_data;
wire [15:0] TxD_dataD = RegisterInputData ? TxD_dataReg : TxD_data;
always @(posedge clk )
if(counter<2)
begin
case(state)
4'b0000: if(TxD_start) state <= 4'b0001;
4'b0001: if(BaudTick) state <= 4'b0100;
4'b0100: if(BaudTick) state <= 4'b1000; // start
4'b1000: if(BaudTick) state <= 4'b1001; // bit 0
4'b1001: if(BaudTick) state <= 4'b1010; // bit 1
4'b1010: if(BaudTick) state <= 4'b1011; // bit 2
4'b1011: if(BaudTick) state <= 4'b1100; // bit 3
4'b1100: if(BaudTick) state <= 4'b1101; // bit 4
4'b1101: if(BaudTick) state <= 4'b1110; // bit 5
4'b1110: if(BaudTick) state <= 4'b1111; // bit 6
4'b1111: if(BaudTick)
begin
state <= 4'b0010;
counter<=counter+1;
end // bit 7
4'b0010: if(BaudTick) state <= 4'b0011; // stop1
4'b0011: if(BaudTick) state <= 4'b0000; // stop2
default: if(BaudTick) state <= 4'b0000;
endcase
end
else if(TxD_start==0)
counter<=0;
reg muxbit;
always @( * )
if(counter==0)
begin
case(state[2:0])
3'd0: muxbit <= TxD_dataD[0];
3'd1: muxbit <= TxD_dataD[1];
3'd2: muxbit <= TxD_dataD[2];
3'd3: muxbit <= TxD_dataD[3];
3'd4: muxbit <= TxD_dataD[4];
3'd5: muxbit <= TxD_dataD[5];
3'd6: muxbit <= TxD_dataD[6];
3'd7: muxbit <= TxD_dataD[7];
endcase
end
else
begin
case(state[2:0])
3'd0: muxbit <= TxD_dataD[8];
3'd1: muxbit <= TxD_dataD[9];
3'd2: muxbit <= TxD_dataD[10];
3'd3: muxbit <= TxD_dataD[11];
3'd4: muxbit <= TxD_dataD[12];
3'd5: muxbit <= TxD_dataD[13];
3'd6: muxbit <= TxD_dataD[14];
3'd7: muxbit <= TxD_dataD[15];
endcase
end
用户1779562 2015-12-15 18:57
用户575732 2013-10-24 10:45
用户377235 2012-7-31 15:47
用户420394 2012-7-10 09:12
用户377235 2012-7-7 21:22
一直都用的WEB版的,原来还有SwitcherPro Desktop 这么个软件。
用户377235 2012-6-8 18:36