久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2566|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

簡(jiǎn)易FPGA UART源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:674699 發(fā)表于 2019-12-26 16:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
簡(jiǎn)易FPGA UART
  1. module uart_rx
  2.         #(
  3.         parameter N_DATA_BITS = 8, // 串口數(shù)據(jù)位個(gè)數(shù), 取值范圍: 5, 6, 7, 8, 默認(rèn)值: 8位
  4.                   HOW_MANY_TICKS_FOR_STOP_BIT = 16
  5.         )
  6.         (
  7.         input wire clk,
  8.         input wire reset,
  9.         input wire rx,
  10.         input wire s_tick,
  11.         output reg rx_done_tick,
  12.         output wire [7:0] dout
  13.         );

  14. // symbolic state declaration for UART receiver
  15. localparam [1:0]
  16.         idle = 2'b00,
  17.         start = 2'b01,
  18.         data = 2'b10,
  19.         stop = 2'b11;

  20. // state register
  21. reg [1:0] state_reg, state_next;

  22. // signal declaration
  23. reg [7:0] b_reg, b_next; // 數(shù)據(jù)位在寄存器內(nèi)每個(gè)周期向右移1bit
  24. reg [2:0] n_reg, n_next;
  25. reg [3:0] s_reg, s_next; // 作為s_tick的計(jì)數(shù)器, 遞增計(jì)數(shù)

  26. // body
  27. // FSMD state and data registers
  28. always @(posedge clk, posedge reset)
  29. begin
  30.         if (reset)
  31.                 begin
  32.                         state_reg <= idle;
  33.                         b_reg <= 8'b0;
  34.                         n_reg <= 3'd0;
  35.                         s_reg <= 4'd0;
  36.                 end
  37.         else
  38.                 begin
  39.                         state_reg <= state_next;
  40.                         b_reg <= b_next;
  41.                         n_reg <= n_next;
  42.                         s_reg <= s_next;
  43.                 end
  44. end

  45. // FSMD next-state logic
  46. always @*
  47. begin
  48.         rx_done_tick = 1'b0;
  49.         state_next = state_reg;
  50.         b_next = b_reg;
  51.         n_next = n_reg;
  52.         s_next = s_reg;
  53.         case (state_reg)
  54.                 /* 空閑位階段 */
  55.                 idle:
  56.                 if (rx == 1'b0)
  57.                         begin
  58.                                 state_next = start; // 當(dāng)rx首次出現(xiàn)低電平時(shí)空閑位結(jié)束, 準(zhǔn)備進(jìn)入下一狀態(tài)讀起始位
  59.                                 s_next = 0;
  60.                         end
  61.                 /* 起始位階段 */
  62.                 start:
  63.                 if (s_tick)
  64.                         begin
  65.                                 s_next = s_reg + 1;
  66.                                 if (s_reg == 7)
  67.                                         begin
  68.                                                 s_next = 0;
  69.                                                 state_next = data; // 準(zhǔn)備開始讀數(shù)據(jù)位
  70.                                                 n_next = 0;
  71.                                         end
  72.                         end
  73.                 /* 數(shù)據(jù)位階段 */
  74.                 data:
  75.                 if (s_tick)
  76.                         begin
  77.                                 s_next = s_reg + 1;
  78.                                 if (s_reg == (16-1))
  79.                                         begin
  80.                                                 s_next = 0;
  81.                                                 b_next = {rx, b_reg[7:1]};
  82.                                                 n_next = n_reg + 1;
  83.                                                 if (n_reg == (N_DATA_BITS-1))
  84.                                                         begin
  85.                                                                 state_next = stop;
  86.                                                                 //n_next = n_reg;
  87.                                                         end
  88.                                         end
  89.                         end
  90.                 /* 停止位階段 */
  91.                 stop:
  92.                 if (s_tick)
  93.                         begin
  94.                                 s_next = s_reg + 1;
  95.                                 if (s_reg == (HOW_MANY_TICKS_FOR_STOP_BIT-1))
  96.                                         begin
  97.                                                 rx_done_tick = 1'b1;
  98.                                                 state_next = idle;
  99.                                                 //s_next = s_reg;
  100.                                         end
  101.                         end
  102.         endcase
  103. end

  104. // output
  105. assign dout = b_reg;

  106. endmodule
復(fù)制代碼


verilog_code_tips-uart.zip

2.07 KB, 下載次數(shù): 16, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线视频一区二区 | 国产精品久久久久久久久久久新郎 | 国产精品成人一区二区三区 | 色偷偷噜噜噜亚洲男人 | 日韩欧美国产一区二区三区 | 免费黄色录像片 | 亚洲精品9999 | 成人在线播放网址 | 久久久久国产一级毛片 | 日韩精品免费在线 | 黄色国产视频 | 色.com| 中文字幕免费视频 | 影音先锋亚洲资源 | 国产一级片 | 免费精品在线视频 | 99久9| 国产视频1区 | 日韩欧美在线视频 | 日日摸日日碰夜夜爽2015电影 | 黄色网址av | 国产成人99久久亚洲综合精品 | 在线观看中文字幕视频 | 亚洲免费av一区 | 男女羞羞的网站 | 91在线视频播放 | 欧美成人精品激情在线观看 | h视频在线看 | 蜜臀网 | 欧美一级片久久 | 欧美日韩国产一区二区三区 | 日韩中文字幕在线视频 | 国产草草视频 | 日韩视频一区二区 | 91视频进入 | 午夜天堂 | 麻豆视频在线看 | 精品伦精品一区二区三区视频 | 国产一级视频在线 | 中文字幕第十五页 | 婷婷去俺也去 |