io控制是刚入门的基础,必须熟练掌握。
- // io_defines.v
- `ifndef _IO_DEFINES_V // `include "io_defines.v" //""表示用户文件,不区分大小写,<>是库文件
- `define _IO_DEFINES_V
-
- `define sysclk FPGA_CLK_50M_B5 // 编译的时候,只做替换 [`sysclk]
- `define reset RESET_E8
-
- //==========
- `define key1 KEY1_K18
- `define key2 KEY2_N17
- `define key3 KEY3_N18
- `define key4 KEY4_H17
- //==========
- `define led1 LED1_D15
- `define led2 LED2_C15
- `define led3 LED3_A12
- `define led4 LED4_B12
- `define beep BEEP_H13
- //=============
- `define spi_cs SPI_CS_B8
- `define spi_clk SPI_CLK_C9
- `define spi_io0 SPI_IO0_B4
- `define spi_io1 SPI_IO1_A4
- `define spi_io2 SPI_IO2_B3
- `define spi_io3 SPI_IO3_A3
- //=============
- `define i2c_scl I2C_SCL_D13
- `define i2c_sda I2C_SDA_C13
- //==============
- `define uart1_rx UART1_RX_A15
- `define uart1_tx UART1_TX_B15
- //=============
- // `define
- // `define
- // `define
- // `define
- // `define
`ifndef _IO_DEFINES_V // `include "io_defines.v" //""表示用户文件,不区分大小写,<>是库文件
`define _IO_DEFINES_V

- //======================================================
- module io_def // 模块名字,参数,方法体
- (
- input FPGA_CLK_50M_b5,
- input key1_k18,
- input key2_n17,
- input key3_n18,
- input key4_h17,
- //
- output led1_d15,
- output led2_c15,
- output led3_a12,
- output led4_b12,
-
- output beep_h13 //【注】最后一个参数不加逗号
- );
-
- assign {led1_d15,led2_c15,led3_a12,led4_b12} = {~key1_k18,~key2_n17,~key3_n18,~key4_h17}; //key1_k18 +key2_n17 + key3_n18 +key4_h17 ;
-
-
- endmodule
按钮是区分输入输出的,
LED配置成输入,是不会亮的。
- //`timescale 1s/1ns // 【`】是预编译,类似C语言的#include // 这是FPGA原语 //晶振时钟 1ns
-
- //======类型声明============
- module LED //跟PLC的FB功能块一样,使用前需要实例化,注:不支持中文
- #(
- // 参数变量表
- parameter num1 = 8'b0001_0001 , //二进制 0x11
- parameter num2 = 32'o123456 , //八进制 8#123456
- parameter num3 = 32'd19890722 , //十进制 10#19890722
- parameter num4 = 64'h00ff_00ff //【最后一个不要加逗号,】 // 十六进制 0x00ff00ff // 16#00FF00FF
- )
-
- (
- // io变量表
- //晶振 b5 FPGA_CLK_50M
- //beep h13
- //key1 k18
- //key2 n17
- //key3 n18
- //key4 h17
- //led1 d15
- //led2 c15
- //led3 a12
- //led4 b12
-
- input wire KEY1_k18 , // bool
- input wire KEY2_n17 , // bool
- input wire KEY3_n18 , // bool
- input wire KEY4_h17 , // bool
-
- output wire LED1_d15 , // bool
- output wire LED2_c15 , // bool
- output wire LED3_a12 , // bool
- output wire LED4_b12 , // bool
-
- input mark //【最后一个不要加逗号,】
- );
-
- assign LED1_d15 =~KEY1_k18 ;
- assign LED2_c15 =~KEY1_k18 ;
- assign LED3_a12 =~KEY1_k18 ;
- assign LED4_b12 =~KEY1_k18 ;
-
-
- endmodule
-
assign是逻辑门输出。不会受晶振时钟影响。
- `timescale 1s/1ns // 【`】是预编译,类似C语言的#include // 这是FPGA原语 //晶振时钟 1ns
-
- //======类型声明============
- module tb_LED(); //跟PLC的FB功能块一样,使用前需要实例化,注:不支持中文
-
-
-
- LED ledtest
-
- (
- // io变量表
- //晶振 b5 FPGA_CLK_50M
- //beep h13
- //led1 d15
- //led2 c15
- //led3 a12
- //led4 b12
- //key1 k18
- //key2 n17
- //key3 n18
- //key4 h17
-
- );
-
-
- endmodule
-
实际就是 LED ledtest(); // 实例化 LED这个类型。