明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 14657|回复: 1

【每周FPGA案例】状态机实现的LED交通灯2

[复制链接]
发表于 2020-7-15 17:21:26 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【上板现象】

状态机实现的LED交通灯2在MP801的上板现象
https://www.bilibili.com/video/BV1Af4y117H4?p=8

状态机实现的LED交通灯2在点拨开发板的上板现象

https://www.bilibili.com/video/BV1Af4y117H4?p=9

状态机实现的LED交通灯2在实验箱的上板现象

https://www.bilibili.com/video/BV1Af4y117H4?p=10

【设计教程】


状态机实现的LED交通灯2

--作者:肖肖肖

本文为明德扬原创及录用文章,转载请注明出处
1.1 总体设计1.1.1 概述
发光二极管简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光,可以高效的将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。可通过高低电平的变化来控制LED灯的明灭状态,当输出信号为低电平时,LED灯亮,反之,当输出信号为高电平时,LED灯灭。


1.1.2 设计目标
内容:开发板上有红黄绿 LED 灯各四个,分别放在东西南北方向。参考交通灯的情况,即每个方向都是绿灯亮 10 秒,然后黄灯亮 5 秒,然后红灯亮 15 秒。绿灯按照东西和南北的顺序依次亮。
具体思路:
1.  首先分东西方向和南北方向来设计电路。设计两个不同的状态机来指示不同的状态。东西方向的灯状态相同,南北方向的灯状态相同。
2.  4个方向的灯依次为红绿黄的依次循环时间为 15+10+5=30 秒,所以可以设计一个计数器,计时 30 秒钟,表示一个循环。计数器可以分两个写,一个计时 1秒,一个计时 30秒。
3.  然后再根据计数器的计数值的不同,决定状态机的不同状态。
4.  首先设计东西方向的状态机,复位的时候,绿灯亮,计数器计到 10 秒,黄灯亮,计到15 秒,红灯亮,计满 30 秒,又是绿灯亮......依次循环。
5.  接着设计南北方向的状态机,复位的时候,红灯亮,计数器计到15 秒,绿灯亮,计到20 秒,黄灯亮,计满 30 秒,又是红灯亮......依次循环。


1.1.3信号列表
  
信号名
  
I/O
位宽
定义
clk
I
1
系统工作时钟 50M
rst_n
I
1
系统复位信号,低电平有效
led_east
O
3
3 比特信号,表示东面三个 led 灯,最高位为红灯,最低位为绿灯,低电平时灯亮。
led_south
O
3
3 比特信号,表示南面三个 led 灯,最高位为红灯,最低位为绿灯,低电平时灯亮。
led_west
O
3
3 比特信号,表示西面三个 led 灯,最高位为红灯,最低位为绿灯,低电平时灯亮。
led_north
O
3
3 比特信号,表示北面三个 led 灯,最高位为红灯,最低位为绿灯,低电平时灯亮。


1.1.4 设计思路
根据题目功能要求,东西南北四个方向LED灯按照“红灯-绿灯-黄灯”的顺序依次循环时间为 15+10+5=30 秒,所以可以设计一个计数器,计时 30 秒钟表示一个循环。该计数器可以分两个写,一个计时 1 秒,一个计时 30秒。
因为在数字电路中的延时都是通过计数器实现的,计数器*时钟周期=延时时间。本模块中,由于输入时钟是50MHz,时钟周期为20ns,功能要求每1秒变化一次。我们通过counter来表示延时,当其值为1s/20ns=5000_0000时,表示1秒时间到。
两个计数器的架构图:
1.png
时钟计数器counter:该计数器用于计算1s的时钟个数,加一条件为1,表示一直计数;数到5000_0000下,则表示数到1秒的时间了。
秒计数器:该计数器用于计算1个周期内三色LED按顺序各点亮1次的时间,1周期的时间为30秒,加一条件为时钟计数器的结束条件,表示时钟计数器每数完1s,秒计数器计数加一;数到30下,则表示数到30秒的时间了。


下面是两个计数器的代码:
  1. parameter   COUNT_TIME      =  26'd5000_0000;
  2. parameter   CYCLE_TIME       =   5'd30       ;
  3. parameter   COUNT_WID       =  26           ;
  4. parameter   SEC_WID         =  5            ;
  5.         
  6. reg    [COUNT_WID-1:0] counter            ;
  7. wire                    add_counter         ;
  8. wire                    end_counter         ;
  9. reg    [SEC_WID-1:0]    second             ;
  10. wire                    add_second          ;
  11. wire                    end_second          ;
  12.    
  13. always @(posedge clk or negedge rst_n)begin
  14. if (rst_n==0) begin
  15.   counter <= 0;
  16. end
  17. else if(add_counter) begin
  18. if(end_counter)
  19. counter <= 0;
  20. else
  21.    counter <= counter+1 ;
  22.   end
  23. end
  24. assign add_counter = 1;
  25. assign end_counter = add_counter  && counter == COUNT_TIME-1 ;
  26.   

  27. always @(posedge clk or negedge rst_n)begin
  28. if (rst_n==0) begin
  29.            second <= 0;
  30.        end
  31.         else if(add_second) begin
  32.             if(end_second)
  33.                 second <= 0;
  34.            else
  35.                 second <= second+1 ;
  36.       end
  37.     end
  38.    assign add_second = end_counter;
  39.     assign end_second = add_second  && second == CYCLE_TIME-1 ;
复制代码



按照题目要求:分东西方向和南北方向来设计电路,因此设计两个不同的状态机来指示不同的状态——同一时间内,东西方向的灯状态相同,南北方向的灯状态相同。
两个状态机的架构:
2.png
3.png
东西方向的状态机:该状态机用于设定东西方向LED的颜色跳转状态。
1)       上电后,就跳转到绿灯亮状态,绿灯亮;
2)       10 秒后,黄灯亮,跳转条件为秒计数器计数10下,即add_second &&second==10-1,则表示数到10秒了;
3)       5 秒后,红灯亮,跳转条件为秒计数器计数15下,即add_second &&second==15-1,则表示数到15秒了;
4)       15 秒后,又是绿灯亮,跳转条件为秒计数器计满30下,即add_second &&second==30-1,则表示数到30秒了......依次循环。
南北方向的状态机:该状态机用于设定南北方向LED的颜色跳转状态。
1)       上电后,就跳转到红灯亮状态,红灯亮;
2)       15 秒后,绿灯亮,跳转条件为秒计数器计数15下,即add_second &&second==15-1,则表示数到15秒了;
3)       10 秒后,黄灯亮,跳转条件为秒计数器计数25下,即add_second &&second==25-1,则表示数到25秒了;
4)       5 秒后,又是红灯亮,跳转条件为秒计数器计满30下,即add_second &&second==30-1,则表示数到30秒了......依次循环。


下面是东西、南北方向的两个状态机代码:
  1. parameter   LED_NUM         =   3            ;
  2. parameter   STA_W           =   2            ;

  3. parameter   STA_G           =   2'd1         ;
  4. parameter   STA_Y           =   2'd2         ;
  5. parameter   STA_R           =   2'd3         ;
  6. parameter   GREEN           =   3'b110       ;
  7. parameter   YELLOW          =   3'b101       ;
  8. parameter   RED             =   3'b011       ;


  9. input                   clk                 ;
  10. input                   rst_n               ;
  11. output  [LED_NUM-1:0]   led_east            ;
  12. output  [LED_NUM-1:0]   led_south           ;
  13. output  [LED_NUM-1:0]   led_west            ;
  14. output  [LED_NUM-1:0]   led_north           ;

  15. reg     [LED_NUM-1:0]   led_east            ;
  16. reg     [LED_NUM-1:0]   led_south           ;
  17. reg     [LED_NUM-1:0]   led_west            ;
  18. reg     [LED_NUM-1:0]   led_north           ;

  19. reg     [COUNT_WID-1:0] counter             ;
  20. wire                    add_counter         ;
  21. wire                    end_counter         ;
  22. reg     [SEC_WID-1:0]   second              ;
  23. wire                    add_second          ;
  24. wire                    end_second          ;

  25. reg     [STA_W-1:0]     ew_state_c            ;
  26. reg     [STA_W-1:0]     ew_state_n            ;
  27. wire                    idle2sta_g_start_ew   ;
  28. wire                    sta_g2sta_y_start_ew  ;
  29. wire                    sta_y2sta_r_start_ew  ;
  30. wire                    sta_r2sta_g_start_ew  ;

  31. reg     [STA_W-1:0]     sn_state_c            ;
  32. reg     [STA_W-1:0]     sn_state_n            ;
  33. wire                    idle2sta_r_start_sn   ;
  34. wire                    sta_r2sta_g_start_sn  ;
  35. wire                    sta_g2sta_y_start_sn  ;
  36. wire                    sta_y2sta_r_start_sn  ;


  37. always @(posedge clk or negedge rst_n) begin
  38.     if (rst_n==0) begin
  39.         counter <= 0;
  40.     end
  41.     else if(add_counter) begin
  42.         if(end_counter)
  43.             counter <= 0;
  44.         else
  45.             counter <= counter+1 ;
  46.    end
  47. end
  48. assign add_counter = 1;
  49. assign end_counter = add_counter  && counter == COUNT_TIME-1 ;


  50. always @(posedge clk or negedge rst_n) begin
  51.     if (rst_n==0) begin
  52.         second <= 0;
  53.     end
  54.     else if(add_second) begin
  55.         if(end_second)
  56.             second <= 0;
  57.         else
  58.             second <= second+1 ;
  59.    end
  60. end
  61. assign add_second = end_counter;
  62. assign end_second = add_second  && second == CYCLE_TIME-1 ;


  63. always @(posedge clk or negedge rst_n) begin
  64.     if (rst_n==0) begin
  65.         ew_state_c <= STA_G ;
  66.     end
  67.     else begin
  68.         ew_state_c <= ew_state_n;
  69.    end
  70. end

  71. always @(*) begin
  72.     case(ew_state_c)  
  73.         STA_G :begin
  74.             if(sta_g2sta_y_start_ew)
  75.                 ew_state_n = STA_Y ;
  76.             else
  77.                 ew_state_n = ew_state_c ;
  78.         end
  79.         STA_Y :begin
  80.             if(sta_y2sta_r_start_ew)
  81.                 ew_state_n = STA_R ;
  82.             else
  83.                 ew_state_n = ew_state_c ;
  84.         end
  85.         STA_R :begin
  86.             if(sta_r2sta_g_start_ew)
  87.                 ew_state_n = STA_G ;
  88.             else
  89.                 ew_state_n = ew_state_c ;
  90.         end
  91.         default : ew_state_n = STA_G ;
  92.     endcase
  93. end

  94. assign sta_g2sta_y_start_ew = ew_state_c==STA_G && add_second  && second == 10-1;
  95. assign sta_y2sta_r_start_ew = ew_state_c==STA_Y && add_second  && second == 15-1;
  96. assign sta_r2sta_g_start_ew = ew_state_c==STA_R && add_second  && second == 30-1;

  97. always  @(posedge clk or negedge rst_n)begin
  98.     if(rst_n==1'b0)begin
  99.         led_east<=GREEN;
  100.     end
  101.     else if(ew_state_c==STA_G)begin
  102.         led_east<=GREEN;
  103.     end
  104.     else if(ew_state_c==STA_Y)begin
  105.         led_east<=YELLOW;
  106.     end
  107.     else if(ew_state_c==STA_R)begin
  108.         led_east<=RED;
  109.     end
  110.     else begin
  111.         led_east<=GREEN;
  112.     end
  113. end

  114. always  @(posedge clk or negedge rst_n)begin
  115.     if(rst_n==1'b0)begin
  116.         led_west<=GREEN;
  117.     end
  118.     else if(ew_state_c==STA_G)begin
  119.         led_west<=GREEN;
  120.     end
  121.     else if(ew_state_c==STA_Y)begin
  122.         led_west<=YELLOW;
  123.     end
  124.     else if(ew_state_c==STA_R)begin
  125.         led_west<=RED;
  126.     end
  127.     else begin
  128.         led_west<=GREEN;
  129.     end
  130. end



  131. always @(posedge clk or negedge rst_n) begin
  132.     if (rst_n==0) begin
  133.         sn_state_c <= STA_R ;
  134.     end
  135.     else begin
  136.         sn_state_c <= sn_state_n;
  137.    end
  138. end

  139. always @(*) begin
  140.     case(sn_state_c)  
  141.         STA_R :begin
  142.             if(sta_r2sta_g_start_sn)
  143.                 sn_state_n = STA_G ;
  144.             else
  145.                 sn_state_n = sn_state_c ;
  146.         end
  147.         STA_G :begin
  148.             if(sta_g2sta_y_start_sn)
  149.                 sn_state_n = STA_Y ;
  150.             else
  151.                 sn_state_n = sn_state_c ;
  152.         end
  153.         STA_Y :begin
  154.             if(sta_y2sta_r_start_sn)
  155.                 sn_state_n = STA_R ;
  156.             else
  157.                 sn_state_n = sn_state_c ;
  158.         end
  159.         default : sn_state_n = STA_R ;
  160.     endcase
  161. end

  162. assign sta_r2sta_g_start_sn = sn_state_c==STA_R && add_second  && second == 15-1;
  163. assign sta_g2sta_y_start_sn = sn_state_c==STA_G && add_second  && second == 25-1;
  164. assign sta_y2sta_r_start_sn = sn_state_c==STA_Y && add_second  && second == 30-1;

  165. always  @(posedge clk or negedge rst_n)begin
  166.     if(rst_n==1'b0)begin
  167.         led_south<=RED;
  168.     end
  169.     else if(sn_state_c==STA_G)begin
  170.         led_south<=GREEN;
  171.     end
  172.     else if(sn_state_c==STA_Y)begin
  173.         led_south<=YELLOW;
  174.     end
  175.     else if(sn_state_c==STA_R)begin
  176.         led_south<=RED;
  177.     end
  178.     else begin
  179.         led_south<=GREEN;     
  180.     end
  181. end

  182. always  @(posedge clk or negedge rst_n)begin
  183.     if(rst_n==1'b0)begin
  184.         led_north<=RED;
  185.     end
  186.     else if(sn_state_c==STA_G)begin
  187.         led_north<=GREEN;
  188.     end
  189.     else if(sn_state_c==STA_Y)begin
  190.         led_north<=YELLOW;
  191.     end
  192.     else if(sn_state_c==STA_R)begin
  193.         led_north<=RED;
  194.     end
  195.     else begin
  196.         led_north<=GREEN;   
  197.     end
  198. end


  199. endmodule
复制代码




1.1.5参考设计代码
  1. module  traf_light2(
  2.     clk         ,
  3.     rst_n       ,
  4.     led_east    ,
  5.     led_south   ,
  6.     led_west    ,
  7.     led_north   
  8.     );



  9. parameter   COUNT_TIME      =   26'd5000_0000;
  10. parameter   CYCLE_TIME      =   5'd30        ;
  11. parameter   COUNT_WID       =   26           ;
  12. parameter   SEC_WID         =   5            ;
  13. parameter   LED_NUM         =   3            ;
  14. parameter   STA_W           =   2            ;

  15. parameter   STA_G           =   2'd1         ;
  16. parameter   STA_Y           =   2'd2         ;
  17. parameter   STA_R           =   2'd3         ;
  18. parameter   GREEN           =   3'b110       ;
  19. parameter   YELLOW          =   3'b101       ;
  20. parameter   RED             =   3'b011       ;


  21. input                   clk                 ;
  22. input                   rst_n               ;
  23. output  [LED_NUM-1:0]   led_east            ;
  24. output  [LED_NUM-1:0]   led_south           ;
  25. output  [LED_NUM-1:0]   led_west            ;
  26. output  [LED_NUM-1:0]   led_north           ;

  27. reg     [LED_NUM-1:0]   led_east            ;
  28. reg     [LED_NUM-1:0]   led_south           ;
  29. reg     [LED_NUM-1:0]   led_west            ;
  30. reg     [LED_NUM-1:0]   led_north           ;

  31. reg     [COUNT_WID-1:0] counter             ;
  32. wire                    add_counter         ;
  33. wire                    end_counter         ;
  34. reg     [SEC_WID-1:0]   second              ;
  35. wire                    add_second          ;
  36. wire                    end_second          ;

  37. reg     [STA_W-1:0]     ew_state_c            ;
  38. reg     [STA_W-1:0]     ew_state_n            ;
  39. wire                    idle2sta_g_start_ew   ;
  40. wire                    sta_g2sta_y_start_ew  ;
  41. wire                    sta_y2sta_r_start_ew  ;
  42. wire                    sta_r2sta_g_start_ew  ;

  43. reg     [STA_W-1:0]     sn_state_c            ;
  44. reg     [STA_W-1:0]     sn_state_n            ;
  45. wire                    idle2sta_r_start_sn   ;
  46. wire                    sta_r2sta_g_start_sn  ;
  47. wire                    sta_g2sta_y_start_sn  ;
  48. wire                    sta_y2sta_r_start_sn  ;


  49. always @(posedge clk or negedge rst_n) begin
  50.     if (rst_n==0) begin
  51.         counter <= 0;
  52.     end
  53.     else if(add_counter) begin
  54.         if(end_counter)
  55.             counter <= 0;
  56.         else
  57.             counter <= counter+1 ;
  58.    end
  59. end
  60. assign add_counter = 1;
  61. assign end_counter = add_counter  && counter == COUNT_TIME-1 ;


  62. always @(posedge clk or negedge rst_n) begin
  63.     if (rst_n==0) begin
  64.         second <= 0;
  65.     end
  66.     else if(add_second) begin
  67.         if(end_second)
  68.             second <= 0;
  69.         else
  70.             second <= second+1 ;
  71.    end
  72. end
  73. assign add_second = end_counter;
  74. assign end_second = add_second  && second == CYCLE_TIME-1 ;


  75. always @(posedge clk or negedge rst_n) begin
  76.     if (rst_n==0) begin
  77.         ew_state_c <= STA_G ;
  78.     end
  79.     else begin
  80.         ew_state_c <= ew_state_n;
  81.    end
  82. end

  83. always @(*) begin
  84.     case(ew_state_c)  
  85.         STA_G :begin
  86.             if(sta_g2sta_y_start_ew)
  87.                 ew_state_n = STA_Y ;
  88.             else
  89.                 ew_state_n = ew_state_c ;
  90.         end
  91.         STA_Y :begin
  92.             if(sta_y2sta_r_start_ew)
  93.                 ew_state_n = STA_R ;
  94.             else
  95.                 ew_state_n = ew_state_c ;
  96.         end
  97.         STA_R :begin
  98.             if(sta_r2sta_g_start_ew)
  99.                 ew_state_n = STA_G ;
  100.             else
  101.                 ew_state_n = ew_state_c ;
  102.         end
  103.         default : ew_state_n = STA_G ;
  104.     endcase
  105. end

  106. assign sta_g2sta_y_start_ew = ew_state_c==STA_G && add_second  && second == 10-1;
  107. assign sta_y2sta_r_start_ew = ew_state_c==STA_Y && add_second  && second == 15-1;
  108. assign sta_r2sta_g_start_ew = ew_state_c==STA_R && add_second  && second == 30-1;

  109. always  @(posedge clk or negedge rst_n)begin
  110.     if(rst_n==1'b0)begin
  111.         led_east<=GREEN;
  112.     end
  113.     else if(ew_state_c==STA_G)begin
  114.         led_east<=GREEN;
  115.     end
  116.     else if(ew_state_c==STA_Y)begin
  117.         led_east<=YELLOW;
  118.     end
  119.     else if(ew_state_c==STA_R)begin
  120.         led_east<=RED;
  121.     end
  122.     else begin
  123.         led_east<=GREEN;
  124.     end
  125. end

  126. always  @(posedge clk or negedge rst_n)begin
  127.     if(rst_n==1'b0)begin
  128.         led_west<=GREEN;
  129.     end
  130.     else if(ew_state_c==STA_G)begin
  131.         led_west<=GREEN;
  132.     end
  133.     else if(ew_state_c==STA_Y)begin
  134.         led_west<=YELLOW;
  135.     end
  136.     else if(ew_state_c==STA_R)begin
  137.         led_west<=RED;
  138.     end
  139.     else begin
  140.         led_west<=GREEN;
  141.     end
  142. end



  143. always @(posedge clk or negedge rst_n) begin
  144.     if (rst_n==0) begin
  145.         sn_state_c <= STA_R ;
  146.     end
  147.     else begin
  148.         sn_state_c <= sn_state_n;
  149.    end
  150. end

  151. always @(*) begin
  152.     case(sn_state_c)  
  153.         STA_R :begin
  154.             if(sta_r2sta_g_start_sn)
  155.                 sn_state_n = STA_G ;
  156.             else
  157.                 sn_state_n = sn_state_c ;
  158.         end
  159.         STA_G :begin
  160.             if(sta_g2sta_y_start_sn)
  161.                 sn_state_n = STA_Y ;
  162.             else
  163.                 sn_state_n = sn_state_c ;
  164.         end
  165.         STA_Y :begin
  166.             if(sta_y2sta_r_start_sn)
  167.                 sn_state_n = STA_R ;
  168.             else
  169.                 sn_state_n = sn_state_c ;
  170.         end
  171.         default : sn_state_n = STA_R ;
  172.     endcase
  173. end

  174. assign sta_r2sta_g_start_sn = sn_state_c==STA_R && add_second  && second == 15-1;
  175. assign sta_g2sta_y_start_sn = sn_state_c==STA_G && add_second  && second == 25-1;
  176. assign sta_y2sta_r_start_sn = sn_state_c==STA_Y && add_second  && second == 30-1;

  177. always  @(posedge clk or negedge rst_n)begin
  178.     if(rst_n==1'b0)begin
  179.         led_south<=RED;
  180.     end
  181.     else if(sn_state_c==STA_G)begin
  182.         led_south<=GREEN;
  183.     end
  184.     else if(sn_state_c==STA_Y)begin
  185.         led_south<=YELLOW;
  186.     end
  187.     else if(sn_state_c==STA_R)begin
  188.         led_south<=RED;
  189.     end
  190.     else begin
  191.         led_south<=GREEN;     
  192.     end
  193. end

  194. always  @(posedge clk or negedge rst_n)begin
  195.     if(rst_n==1'b0)begin
  196.         led_north<=RED;
  197.     end
  198.     else if(sn_state_c==STA_G)begin
  199.         led_north<=GREEN;
  200.     end
  201.     else if(sn_state_c==STA_Y)begin
  202.         led_north<=YELLOW;
  203.     end
  204.     else if(sn_state_c==STA_R)begin
  205.         led_north<=RED;
  206.     end
  207.     else begin
  208.         led_north<=GREEN;   
  209.     end
  210. end


  211. endmodule
复制代码



1.2 效果和总结

点拨板:


1.       复位,东西绿灯亮,南北红灯亮
01.jpg
2.       10秒后,东西黄灯亮,南北还是红灯亮
02.jpg
3.       15秒后,东西红灯亮,南北绿灯亮
03.jpg
4.       20秒后。东西还是红灯亮,南北黄灯亮
04.jpg
5.       30秒后,东西绿灯亮,南北红灯亮
05.jpg
Mp801:

1.       复位,东西绿灯亮,南北红灯亮
06.jpg
2.       10秒后,东西黄灯亮,南北还是红灯亮
07.jpg
3.       15秒后,东西红灯亮,南北绿灯亮
08.jpg
4.       20秒后。东西还是红灯亮,南北黄灯亮
09.jpg
5.       30秒后,东西绿灯亮,南北红灯亮
10.jpg

实验箱:

1.       复位,东西绿灯亮,南北红灯亮
11.jpg
2.       10秒后,东西黄灯亮,南北还是红灯亮
12.jpg
3.       15秒后,东西红灯亮,南北绿灯亮
13.jpg
4.       20秒后。东西还是红灯亮,南北黄灯亮
14.jpg
5.       30秒后,东西绿灯亮,南北红灯亮
15.jpg


观看上面的现象,可以发现,各项功能正常:开发板上有红黄绿三色 LED 灯各四个,在东西南北方向各有一组。参考交通灯的情况,即每个方向都是绿灯亮 10 秒,然后黄灯亮 5 秒,然后红灯亮 15 秒。绿灯按照东西和南北的顺序依次亮。成功完成设计目标。
感兴趣的朋友也可以访问明德扬论坛(http://www.FPGAbbs.cn/)进行FPGA相关工程设计学习,也欢迎大家在评论里进行讨论!


也可以看一下我们往期的文章:
1.3 公司简介
明德扬是一家专注于FPGA领域的专业性公司,公司主要业务包括开发板、教育培训、项目承接、人才服务等多个方向。点拨开发板——学习FPGA的入门之选。
MP801
开发板——千兆网、ADDA、大容量SDRAM等,学习和项目需求一步到位。网络培训班——不管时间和空间,明德扬随时在你身边,助你快速学习FPGA周末培训班——明天的你会感激现在的努力进取,升职加薪明德扬来助你。就业培训班——七大企业级项目实训,获得丰富的项目经验,高薪就业。专题课程——高手修炼课:提升设计能力;实用调试技巧课:提升定位和解决问题能力;FIFO架构设计课:助你快速成为架构设计师;时序约束、数字信号处理、PCIE、综合项目实践课等你来选。项目承接——承接企业FPGA研发项目。人才服务——提供人才推荐、人才代培、人才派遣等服务。




【设计教程下载】

状态机实现的LED交通灯2.pdf (2.32 MB, 下载次数: 1431)
FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385

0

主题

2

帖子

81

积分

注册会员

Rank: 2

积分
81
发表于 2021-8-18 10:23:04 | 显示全部楼层
谢谢,拜读一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-25 12:10 , Processed in 0.063181 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

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