OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8033|回复: 9

有关FPGA串口方面的提问

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2015-11-23
在线时间
10 小时
发表于 2015-11-23 16:30:50 | 显示全部楼层 |阅读模式
5金钱
刚开始接触FPGA,麻烦大家了,问你们一个问题哈:对于FPGA的串口通讯程序,那些子模块程序,像波特率发生模块,接收和发送模块等,是自己一点一点写出来的?还是可以直接去调用呢???

最佳答案

查看完整内容[请看2#楼]

回复【4楼】风吹草动: --------------------------------- 回复【3楼】xuande: --------------------------------- FPGA没有库的概念,网上应该有公开的串口的IP核可以拿来用,或者是FPGA的厂商有提价,但是要跟MCU的串口相比,还差得多,MCU里的串口都是用商业IP核,不在一个等级
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2015-11-23 16:30:51 | 显示全部楼层
回复【4楼】风吹草动:
---------------------------------
回复【3楼】xuande:
---------------------------------
FPGA没有库的概念,网上应该有公开的串口的IP核可以拿来用,或者是FPGA的厂商有提价,但是要跟MCU的串口相比,还差得多,MCU里的串口都是用商业IP核,不在一个等级
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2015-11-23 16:54:22 | 显示全部楼层
要自己写出来
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复

使用道具 举报

58

主题

6289

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11361
金钱
11361
注册时间
2014-4-1
在线时间
1271 小时
发表于 2015-11-23 17:08:26 | 显示全部楼层
感觉有这样的库。

以前自己写过接收程序,误码率偏高。
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2015-11-23
在线时间
10 小时
 楼主| 发表于 2015-11-23 17:17:40 | 显示全部楼层
回复【2楼】mzwhhwj:
---------------------------------
要是自己写,是不是感觉效率太低了吧?~~毕竟其它的单片机几乎几句话就搞定串口了~
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2015-11-23
在线时间
10 小时
 楼主| 发表于 2015-11-23 17:18:47 | 显示全部楼层
回复【3楼】xuande:
---------------------------------
恩,我感觉应该也有类似于STM32那样有固件库,可以直接拿来调用,这样就大大提高效率了~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-11-23 22:13:19 | 显示全部楼层
貌似有个脚nios的东东,楼主可以研究下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2015-11-24 16:46:10 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
nios只是ARM的软核,只是个内核,其它的外设还是靠自己去写或者用IP核
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2015-11-23
在线时间
10 小时
 楼主| 发表于 2015-11-24 22:04:12 | 显示全部楼层
回复【7楼】mzwhhwj:
---------------------------------
回复【7楼】mzwhhwj:
---------------------------------
好的,太感谢你了~~
回复

使用道具 举报

26

主题

1513

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6250
金钱
6250
注册时间
2015-8-25
在线时间
996 小时
发表于 2017-4-8 10:41:28 | 显示全部楼层
FPGA的串口是要自己实现的,这就是为啥它难了。实现个啥功能都得自己从时序开始一点一点实现,不像单片机,几句话配置下就可以用了
这个程序,50M晶振,波特率9600,串口接收
module  RS485_Recv (
//input
input           sys_clk    ,
input           sys_rst_n  ,
input           RO         ,
//output
output wire     RE_DE      ,
output reg[7:0] LED
                    );
//parameter define
parameter  WIDTH1 = 8  ;
parameter  WIDTH2 = 16 ;

//reg define
reg[WIDTH1-1:0]   buff               ;
reg[WIDTH1-1:0]   data_out           ;
reg[WIDTH2-1:0]   counter            ;
reg               rxd_din1           ;
reg               rxd_din2           ;
reg               rxd_negedge_sig_flag ;

//wire define
wire              rxd_negedge_sig    ;

assign RE_DE = 1'b0 ;

always @(posedge sys_clk or negedge sys_rst_n)
begin
     if(sys_rst_n == 1'b0)
     begin
          rxd_din1 <= 1'b0 ;
          rxd_din2 <= 1'b0 ;
     end
     else
     begin
          rxd_din1 <= RO ;
          rxd_din2 <= rxd_din1 ;
     end
end

assign rxd_negedge_sig = (~rxd_din2) & (rxd_din1) ;

always @(posedge sys_clk or negedge sys_rst_n)
begin
     if(sys_rst_n == 1'b0)
         rxd_negedge_sig_flag <= 1'b0 ;
     else
         rxd_negedge_sig_flag <= rxd_negedge_sig ;
end

always @(posedge sys_clk or negedge sys_rst_n)
begin
     if(sys_rst_n == 1'b0)
         counter <= 16'b0 ;
     else if(rxd_negedge_sig_flag == 1'b1 && counter > 16'd57200)
         counter <= 16'b0 ;
     else if(counter <= 16'd57200)
         counter <= counter + 16'b1;
     else ;
end

always @(posedge sys_clk or negedge sys_rst_n)
begin
     if(sys_rst_n == 1'b0)
         buff <= 8'b0;
     else
     begin
          case(counter)
          7800   :  buff[0] <= rxd_din1  ;
          13000  :  buff[1] <= rxd_din1  ;
          18200  :  buff[2] <= rxd_din1  ;
          23400  :  buff[3] <= rxd_din1  ;
          28600  :  buff[4] <= rxd_din1  ;
          33800  :  buff[5] <= rxd_din1  ;
          39000  :  buff[6] <= rxd_din1  ;
          44200  :  buff[7] <= rxd_din1  ;
          default:  buff    <= buff      ;
          endcase
     end
end

always @(posedge sys_clk or negedge sys_rst_n)
begin
     if(sys_rst_n == 1'b0)
         LED <= 8'b0 ;
     else
         LED <= ~buff;
end

endmodule
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 12:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表