用FPGA串口发送一个16位的数据 怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用FPGA串口发送一个16位的数据 怎么做?相关的知识,希望对你有一定的参考价值。
用FPGA串口发送一个16位的数据,当然需要分两次发送,每次发送8位。单独发送8位数据的程序我有,如果要实现16位发送,需要如何修改呢?哪位高人做过相关的东西,指点一下吧
你如果是用FPGA逻辑实现的串口收发控制器的话应该是用状态机实现的串并转换,那么你加一个变量I你的发送BUF也就是并行的数据是16位的,你只用作一个8位的串并转换,再每个状态下I都加1像下面这样:bit1 : begin dataout <= data_buf[i]; state <= bit2; i<=i+1; end
bit2 : begin dataout <= data_buf[i]; state <= bit3; i<=i+1; end
bit3 : begin dataout <= data_buf[i]; state <= bit4; i<=i+1; end
bit4 : begin dataout <= data_buf[i]; state <= bit5; i<=i+1; end
bit5 : begin dataout <= data_buf[i]; state <= bit6; i<=i+1; end
bit6 : begin dataout <= data_buf[i]; state <= bit7; i<=i+1; end
bit7 : begin dataout <= data_buf[i]; state <= bit8; i<=i+1; end
bit8 : begin dataout <= data_buf[i]; state <= over; i<=i+1; end
再搞一个控制I的值的判断向控制I的值在0-15之间就可以了。
当然你如果是用Nios2实现的话就更简单了,你去看看资料或者去网上找点例程一看就明白我这里就不说了。 参考技术A 要发送多少数据可以由你控制啊,你在verilog代码中编好输出
out
【3:0】
dataout(如果是8位的话是【7:0】);
再在ucf文件中,关联好dataout和fpga的4个io端口,这样就是发送4位了。 参考技术B 设计两个8位移位寄存器,分别存放高8位和低8位,一个高8位“空”信号,先传输高8位,当高8位传出完了之后,用“空”信号触发低8位发送。当然低8位也可以设计个“空”信号,来触发下一步操作。 参考技术C 先发8位,延时一下,再发8位不就行了。就用IOWR***()函数就行了。 参考技术D 哥们,有串口收发的程序吗?
纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转化后是灰度图片,直到前一阵我才发现,其实并不是这样。MATLAB代码转化出来的图片数据就是8位的彩色图片数据,只不过当数据小于16’h10时,MATLAB生成的数据便是A、B、E,但是串口调试助手会怎么识别呢!如下图(前方多图高能)
这是我发送的十六进制为0的数据,而串口却显示发送的是FF,显然数据是错误的。这样会造成显示的图片是这样的。
或者是这样的
更可气的是当我测试彩色条纹的时候,出现了这样的神奇问题。
这才是原图啊,当然现在看来就不难解释了,为什么发送的是黑色图片数据,最终显示的缺失白色的呢!对于发送的16进制个位的数据串口调试助手没办法直接识别为十六进制数据,发送16进制0(黑色)数据是会被串口调试助手默认为FF,我把数据改成0x00,结果如下图,是完全正确的!
这是我的MATLAB代码转化图片数据的问题,最终修改MATLAB代码,得到完美的图片数据最后显示成功,我使用了guan小姐姐,还挺漂亮呢!想要获得正确的MATLAB代码的朋友,后台回复MATLAB代码即可获得正确代码链接!
我的串口发送的是8位的图片数据,但是我的VGA是16位RGB,那么显示的时候就要用的量化补偿,将八位的数据拼接成16位的数据显示。效果当然会有一点偏差不过这样也已经不错了。
下面要说的是我的第二个问题,既然MATLAB代码有问题,为什么我最后显示图片成功了,还是灰色的呢。问题要回到我的代码上了。串口发送过来的数据是8位的,我的VGA是16位的,要想正常显示,就必须进行拼接,大家可以看一下我的拼接部分代码。
最后一行是我的拼接部分代码,这样写显然是错误的,8位拼接成16位应该是上面那两行其一都可以,至于我这样瞎碰,碰到了显示成功,还把第一个错误里的深黑颜色不能显示的问题给掩盖了,最终让我以为MATLAB转化的图片数据是灰度的,我后面的那些图像处理的文章还代码也都要改改了。这真是一个很大的失误。
基于FPGA串口发送彩色图片数据至VGA显示视频:http://t.cn/RO7UsfK
量化补偿和量化压缩可以参考我的另一篇博文:量化补偿与量化压缩
如果你想获得本文的所有课件,请关注本人的个人微信订阅号:开源FPGANingHeChuan或扫描下方二维码关注订阅号,在后台回复图像处理,即可获得本文的所有课件、资料以及更多FPGA的学习资料哦!
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:开源FPGANingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/7631168.html
以上是关于用FPGA串口发送一个16位的数据 怎么做?的主要内容,如果未能解决你的问题,请参考以下文章