Experimento 4 de FPGA: diseño de controlador de semáforo

Tabla de contenido

1. Propósito del experimento

2. Requisitos de diseño

3. Código del experimento

1. diseño de código de archivo fuente

2. Código de archivo de simulación

3. Análisis del principio del código

4. Resultados experimentales y análisis

1. Pasador de bloqueo

2. Simulación de forma de onda y análisis

3. Descargue los resultados y análisis de las pruebas

5. Experiencia experimental

1. Resolver los problemas encontrados en el experimento y resolverlos

2. La experiencia de completar el experimento


1. Propósito del experimento

(1) Familiarizado con el principio de funcionamiento del controlador de semáforo;

(2) Dominar el diseño de la máquina de estado;

(3) Dominar el proceso de diseño de implementación de circuitos secuenciales complejos con lenguaje Verilog.

2. Requisitos de diseño

Implemente una función de controlador de semáforo para una intersección formada por una carretera principal y una carretera rural:

(1) Hay seis semáforos a controlar: MR (rojo principal), MY (amarillo principal), MG (verde principal), CR (rojo rural), CY (amarillo rural) y CG (verde rural);

(2) Hay un intervalo de 4 segundos antes de que el semáforo cambie de verde a rojo, y no hay intervalo de rojo a verde;

(3) Un sensor en serie está enterrado en el lado derecho del camino rural.Cuando un vehículo está a punto de pasar el camino rural, se envía una señal de solicitud S = 1 y S = 0 en otros momentos;

(4) Por lo general, el sistema permanece en el estado de tráfico en carretera principal (MGCR). Una vez que la señal S es válida, cambiará al estado de tráfico en carretera rural (MRCG) después de pasar la luz amarilla en la carretera principal durante 4 segundos (MYCR). ), pero se debe garantizar que la carretera principal se pueda cambiar después de 60 segundos;

(5) Una vez que desaparece la señal S, el sistema sale del estado MRCG, es decir, entra en el estado MGCR a través de la luz amarilla de la carretera nacional durante 4 segundos (MRCY), incluso si la señal S es siempre válida, el estado MRCG no puede ser más de 20 segundos.

3. Código del experimento

1. diseño de código de archivo fuente

  1. `timescale 1ns / 1ps
    module traffic(clk,Traffic_Light,s,sout,rst,count_display);//,cnt,state,clk1
    input clk,s,rst;//clk时钟信号输入,s来车信号(开关),rst复位信号输入(按钮)
    output[10:0] count_display;//数码管输出
    output[5:0] Traffic_Light;//5-3主  2-0乡 (led*6)
    output sout;//sout来车信号显示(led)
    //定义交通灯的各种状态
    parameter[5:0] MGCR=6'b001100,MYCR=6'b010100,MRCG=6'b100001,MRCY=6'b100010;
    reg[5:0] state;
    reg[15:0] cnt;
    reg[5:0] Traffic_Light;
    reg clk1,sout;
    //进行状态初始化
    initial 
     begin
     cnt<=59;  //60s倒计时
     state<=MGCR;
     Traffic_Light<=MGCR;
     
     end
     
    //分频:
    reg[26:0] clk_cnt;
    reg  [2:0]  sel=3'b0;
    
    always @(posedge clk)
        begin 
            clk_cnt=clk_cnt+1;
            if(clk_cnt==100000000)
                begin
                clk_cnt=0;
                clk1=1'b1;
                end
            else
                clk1=1'b0;
            
            if(clk_cnt%100000==0) 
                begin
                sel=sel+1;
                if(sel==3) 
                    sel=0;
                end
        end
    
    display SG_display(
        .clk (clk),
        .rst (rst),
        .counter (cnt),
        .count_display (count_display),
        .sel(sel)
    );
    
    always @(s)
     begin
     if(s==1) sout=1;
     else sout=0;
     end
    
    //状态转移
    always @(posedge clk1 or negedge rst)
     if(!rst)begin state<=MGCR;cnt<=16'd59;end
     else begin
      case (state)
      MGCR:if (cnt==0) 
        begin 
         if(s==1)begin Traffic_Light<=MYCR; cnt<=3;
       state<=MYCR; end
    //如果s信号为0,则回到初始状态,开始60s倒计时
         else cnt<=59;
        end  
    //开始60s倒计时
         else cnt<=cnt-1;
    //主红乡黄状态后,仍然s=1,则开始20s倒计时状态
      MYCR:if (cnt==0)begin Traffic_Light<=MRCG; cnt<=19;state<=MRCG;end
         else cnt<=cnt-1;
    //经过乡道黄灯4s后,进入MGCR状态
       MRCG:if (cnt==0||s==0) begin Traffic_Light<=MRCY; cnt<=3;state<=MRCY;end  
           else cnt<=cnt-1;
    //4s倒计时结束后,进入主绿乡红状态,数码管60s倒计时
      MRCY:if (cnt==0) begin Traffic_Light<=MGCR; cnt<=59;state<=MGCR;end 
           else cnt<=cnt-1;
      default: state<=MGCR;
      endcase
     end
     
    endmodule

2. Código de archivo de simulación

  1. `timescale 1ns / 1ps
    module traffic_tb();
        reg clk,rst,s;
        wire sout;
        wire[5:0]  Traffic_Light;
        wire[5:0] state;
        wire[15:0] cnt;
        //开始仿真
        traffic sim_traffic(
            .clk(clk);
            .rst(rst),
            .s(s),
            .sout(sout),
            .Traffic_Light(Traffic_Light[5:0]),
            .state(state[5:0]),
            .cnt(cnt[15:0])
        );
    //初始化
        initial begin
            clk = 0;
            rst = 1;
            s = 0;
            #3250
            s = 1;
         #1000
       s = 1;
        end
        always #10  clk = ~clk;
    endmodule

3. Análisis del principio del código

En este experimento lo más importante es el diseño de la máquina de estados, donde se diseñan 4 estados. Cuando s0 es MGCR, la instrucción de ejecución es la siguiente: si el temporizador es 0, comience a juzgar la señal S, si la señal es válida, es decir, hay un automóvil en el camino rural, luego salte a s1, es decir , el estado MYCR y realiza una cuenta regresiva de luz amarilla de cuatro segundos. Si la señal no es válida, todavía está en el estado MGCR y la cuenta regresiva comienza nuevamente desde 60 segundos. 

Cuando s1 es MYCR, la instrucción de ejecución es la siguiente: si el temporizador es 0, ingrese s2, que es el estado MRCG, y el temporizador comienza a contar desde 20 segundos. Cuando s2 es MRCG, la instrucción de ejecución es la siguiente: si la señal de carretera rural S sigue siendo 1 y 20 

Cuando termina la segunda cuenta regresiva y el temporizador es 0, el estado cambia a s3, que es el estado MRCY, y se realiza la cuenta regresiva de luz amarilla de cuatro segundos, pero una vez que la señal S es 0, salta inmediatamente fuera del estado s2 y entra en el estado s3 MRCY. Cuando s3 es MRCY, la instrucción de ejecución es la siguiente: después de que finaliza la cuenta regresiva de luz amarilla de cuatro segundos, regrese al estado MGCR, comience la cuenta regresiva de 60 segundos y espere la siguiente transición de estado.

4. Resultados experimentales y análisis

1. Pasador de bloqueo

como se muestra en el archivo de restricciones

set_property -dict { PACKAGE_PIN W5 IOSTANDARD LVCMOS33 } [get_ports clk]

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk]

## Interruptores

set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 } [get_ports {s}]

set_property -dict { PACKAGE_PIN V16 IOSTANDARD LVCMOS33 } [get_ports {rst}]

## LED

set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[0]}]

set_property -dict { PACKAGE_PIN E19 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[1]}]

set_property -dict { PACKAGE_PIN U19 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[2]}]

set_property -dict { PACKAGE_PIN V19 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[3]}]

set_property -dict { PACKAGE_PIN W18 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[4]}]

set_property -dict { PACKAGE_PIN U15 IOSTANDARD LVCMOS33 } [get_ports {Traffic_Light[5]}]

set_property -dict { PACKAGE_PIN L1 IOSTANDARD LVCMOS33 } [get_ports {sout}]

##7 Pantalla de segmento

set_property -dict { PACKAGE_PIN W7 IOSTANDARD LVCMOS33 } [get_ports {count_display[6]}]

set_property -dict { PACKAGE_PIN W6 IOSTANDARD LVCMOS33 } [get_ports {count_display[5]}]

set_property -dict { PACKAGE_PIN U8 IOSTANDARD LVCMOS33 } [get_ports {count_display[4]}]

set_property -dict { PACKAGE_PIN V8 IOSTANDARD LVCMOS33 } [get_ports {count_display[3]}]

set_property -dict { PACKAGE_PIN U5 IOSTANDARD LVCMOS33 } [get_ports {count_display[2]}]

set_property -dict { PACKAGE_PIN V5 IOSTANDARD LVCMOS33 } [get_ports {count_display[1]}]

set_property -dict { PACKAGE_PIN U7 IOSTANDARD LVCMOS33 } [get_ports {count_display[0]}]

2. Simulación de forma de onda y análisis

Primero dibuje el diagrama de análisis de estado como se muestra a continuación

Forma de onda correspondiente y análisis del diseño del semáforo

Primero, el significado de algunas señales clave

clk: señal de reloj

primero: habilitar terminal

sout: la señal s en la solicitud

cnt: muestra la cuenta regresiva

Traffic_light: El estado del semáforo

(1) Cuando la terminal de habilitación sea válida, comience desde el estado inicial del país verde principal rojo y realice una cuenta regresiva de 60 segundos

(2) Después de completar el conteo de 60 s menos 1, si la señal s es 1 (lo que representa que hay un automóvil que solicita pasar en la carretera principal), se convierte en el estado principal amarillo y verde, y el tubo digital cuenta regresivamente para 4 s; después de la cuenta regresiva de 4 s, ingresa al estado principal rojo y verde, si la señal s es siempre 1, el tubo nixie comienza a contar regresivamente durante 20 s

 

Al observar la forma de onda, es obvio que se observa la transición del final de la cuenta regresiva de 60 a la cuenta regresiva de 4. Después de que finaliza la cuenta regresiva de 4 s, dado que la señal s sigue siendo 1, ingresa al estado de cuenta regresiva de 20 s.

(3) Cuando se complete la cuenta regresiva de 20 segundos, también ingresará al estado rojo y al estado amarillo. Principalmente rojo y amarillo, el tubo digital inicia una cuenta regresiva de 4 s y entra en el estado principal verde y rojo una vez que se completa el conteo

(4) Una vez que se completa el conteo, ingresa al estado verde principal, el tubo digital cuenta regresivamente durante 60 segundos y repite el estado anterior.

3. Descargue los resultados y análisis de las pruebas

En el laboratorio, use la placa de desarrollo bassy3 para descargar y probar.

(1) Cuando se reinicia, el estado inicial es verde y rojo, y el tubo digital cuenta regresivamente desde 60. Como se muestra en la Figura 1

 

(2) Requisitos: después de completar el conteo de 60 s menos 1, si la señal s es 1 (lo que representa que hay un automóvil en la carretera principal del municipio), cambiará al estado principal amarillo y verde, y el tubo digital contará hacia atrás durante 4 s; si la señal s es 0 (que representa el municipio cuando no hay ningún vehículo en la carretera principal para pasar), volverá al estado inicial, y el verde y el rojo principales reiniciarán la cuenta regresiva de 60 s.

En este momento, la señal s de la placa de desarrollo es 1, y el tubo digital está en la etapa de cuenta regresiva de 4 s, como se muestra en la Figura 2 

 

               Figura 3 Figura 4                   

(3) Análisis: después de la cuenta regresiva de 4 s, ingrese al estado principal rojo y verde. Si la señal s es 0 en este momento, se transferirá inmediatamente al estado principal rojo y amarillo; si la señal s es siempre 1, el tubo digital comenzará una cuenta regresiva de 20 s. Durante el período de conteo Una vez que la señal s sea 0, ingresará inmediatamente al estado principal rojo y amarillo. Incluso si la señal s es siempre 1, ingresará al estado principal rojo y amarillo después de la cuenta regresiva de 20 s esta completado. Dado que la señal s todavía es 1 en este momento, el tubo digital ingresa a la cuenta regresiva de 20 segundos, como se muestra en la Figura 3

(4) Análisis: Principalmente rojo y amarillo, el tubo digital inicia una cuenta regresiva de 4 s, después de completar el conteo, ingresa al estado principal verde y rojo, el tubo digital cuenta regresivamente durante 60 s y repite el estado anterior. En este momento, la señal s es 1, y el estado de cuenta regresiva de 60 segundos se realiza de nuevo, como se muestra en la figura 5.

5. Experiencia experimental

1. Resolver los problemas encontrados en el experimento y resolverlos

En el experimento, se encuentra que el juicio del estado de cada semáforo es independiente y el procedimiento es demasiado engorroso.

Solución: puede vincular el juicio de estado de cada semáforo con el estado de la máquina de estado. Aquí también consulte el método en Internet, establezca un parámetro de seis dígitos para cada estado de la máquina de estado, y un dígito corresponde a un estado del semáforo, 1 encendido y 0 apagado. De esta forma, solo se puede usar el estado de la máquina de estado para determinar si todos los semáforos están encendidos o apagados. 

2. La experiencia de completar el experimento

El experimento de diseño de semáforos es un proyecto práctico muy significativo.A través de este experimento, la aplicación de la máquina de estado se puede comprender mejor y el papel de la máquina de estado se puede reflejar en la escena real.

En este experimento, me di cuenta profundamente de la importancia de la máquina de estado para el control de semáforos y también aprendí a usar el lenguaje de programación Verilog HDL para diseñar la máquina de estado.

En el proceso de completar este experimento, encontré algunos problemas y desafíos, pero finalmente completé todo el experimento con éxito. La siguiente es mi experiencia y la experiencia adquirida durante el experimento:

Este experimento se basa en el tercer experimento, para comprender mejor la aplicación de la máquina de estado y completar requisitos de diseño experimental más complejos. Cuando vi por primera vez los requisitos de este experimento, sentí que era un gran problema, pero de hecho, después de una cuidadosa consideración, es fácil de implementar usando una máquina de estado. muchos diseños Por supuesto, todavía hay muchos problemas encontrados en el diseño del programa.Por ejemplo, al principio, la cuenta regresiva no se diseñó con suficientes códigos BCD, lo que generó problemas en el programa del tubo digital, y hay un control separado de los semáforos detrás de cada estado El estado ha sido juzgado, parece redundante y así sucesivamente. No es difícil realizar una función, pero lo más importante es cómo implementarla en un lenguaje más conciso y flexible, por lo que el diseño de optimización del programa experimental es muy necesario. De hecho, en muchos campos, cómo realizar mejor optimización Es un gran problema que aqueja a los técnicos. Hay un poco más de funciones para realizar en este experimento que en los anteriores, pero la sensación de logro después de la finalización también es mayor. Cada vez que completo un experimento, puedo sentir que estoy mejorando gradualmente y adquiriendo dominio. 

2023-04-20

Supongo que te gusta

Origin blog.csdn.net/m0_64198455/article/details/131547727
Recomendado
Clasificación