用FPGA串口发送一个16位的数据 怎么做?
用FPGA串口发送一个16位的数据,当然需要分两次发送,每次发送8位。单独发送8位数据的程序我有,如果要实现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实现的话就更简单了,你去看看资料或者去网上找点例程一看就明白我这里就不说了。
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实现的话就更简单了,你去看看资料或者去网上找点例程一看就明白我这里就不说了。
展开全部
要发送多少数据可以由你控制啊,你在verilog代码中编好输出
out
【3:0】
dataout(如果是8位的话是【7:0】);
再在ucf文件中,关联好dataout和fpga的4个io端口,这样就是发送4位了。
out
【3:0】
dataout(如果是8位的话是【7:0】);
再在ucf文件中,关联好dataout和fpga的4个io端口,这样就是发送4位了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设计两个8位移位寄存器,分别存放高8位和低8位,一个高8位“空”信号,先传输高8位,当高8位传出完了之后,用“空”信号触发低8位发送。当然低8位也可以设计个“空”信号,来触发下一步操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先发8位,延时一下,再发8位不就行了。就用IOWR***()函数就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-09-12
展开全部
哥们,有串口收发的程序吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询