介绍一种解决以少量IO控制多个IO的方法。一般IO控制管脚不够用,控制方法繁琐的方案,常见的IIC扩展芯片可能不会太多或需要多片,这里介绍的是控制端口多,或矩阵控制等应用,利用CPLD或FPGA现实类似地址译码或138选择器原理,通过移位的方式来实现,重点介绍思路,下文是组合逻辑实现过得应用,具体不在阐述代码。
/************************************************************************************************************
CPLD FPGA to GPIO Port expander. Date: December 21,
************************************************************************************************************/
`timescale 1us/10ns
/* Top module */
module TEST ( outa,outb,outc,outd,in_ada,in_adb,in_adc,in_add,ina,inb,inc,ind,led);
output [na:0] outa;
output [nb:0] outb;
output [nc:0] outc;
output [nd:0] outd;
output led;
input ina;
input inb;
input inc;
input ind;
input [nada:0] in_ada;
input [nadb:0] in_adb;
input [nadc:0] in_adc;
input [nadd:0] in_add;
wire [na:0] outa;
wire [nb:0] outb;
wire [nc:0] outc;
wire [nd:0] outd;
wire led;
reg [47:0] a=48'h1;
reg [47:0] b=48'h1;
reg [23:0] c=24'h1;
reg [23:0] d=24'h1;
reg led_reg=1'h0;
parameter na = 47;
parameter nb = 47;
parameter nc = 23;
parameter nd = 23;
parameter nada = 5;
parameter nadb = 5;
parameter nadc = 4;
parameter nadd = 4;
assign led=led_reg;//led D8
assign outa=(ina)?(a<<(in_ada-1)):48'h0;
assign outb=(inb)?(b<<(in_adb-1)):48'h0;
assign outc=(inc)?(c<<(in_adc-1)):24'h0;
assign outd=(ind)?(d<<(in_add-1)):24'h0;
/********************************************************************************************************/
endmodule