我写的小程序,不知道对错噻!
/*=================================ARM_CPLD_sram 控制单个sram读写数据
刷屏的verilog 程序
=================================*/
/*--------------------------------
输入端口:ARM_to_CPLD( ADDR17,ADDR18,
ADDR0-ADDR16-->地址线,data0-data7
-->数据线,)
输出端口:CPLD_to_sram( data0-data6
addr0-addr16,ce,oe,we,rclk,sclk,sclr_n
si,en)
---------------------------------*/
module arm_cpld_sram( CPLD_clk,cpld_rest,
ARM_addr,ARM_data,ADDR17,ADDR18,
CPLD_data,CPLD_addr,CPLD_oe,CPLD_ce,CPLD_we,
CPLD_rclk,CPLD_sclk,CPLD_sclr_n,CPLD_si,CPLD_en,CPLD_lx
);
inputCPLD_clk; //------CPLD时钟信号--来自板载时钟源
inputcpld_rest; //------复位信号---来自外部(ARM或按键)
inputADDR17; //------控制引脚--来自ARM
inputADDR18; //-------控制引脚--来自ARM
input ARM_addr;//-------通讯地址线--来自ARM
input ARM_data;//-------通讯数据线--来自ARM
output CPLD_oe; //-------SRAM控制信号低为读--来自CPLD
output CPLD_ce; //-------SRAM控制信号读写时都为低--来自CPLD
output CPLD_we; //-------SRAM控制信号高为读,低为写--来自CPLD
inout CPLD_addr; //-------SRAM的数据线--来自CPLD_to_SRAM
inout CPLD_data; //-------SRAM的数据线--来自CPLD_to_SRAM
output CPLD_rclk; //-------595锁存时钟0----1时数据输出--来自CPLD
output CPLD_sclk; //-------595移位时钟每个时钟上升沿数据移位一次--来自CPLD
output CPLD_sclr_n; //-------595清零输入口,寄存器数据清零,低电平有效--来自CPLD
output CPLD_si; //-------595串行数据输入口--来自CPLD
output CPLD_en; //-------595输出有效,低电平--来自CPLD
output CPLD_lx; //-------138------------------来自CPLD
reg CPLD_rclk;
reg CPLD_sclr_n;
reg CPLD_si;
reg CPLD_we;
reg CPLD_data;
reg CPLD_addr;
/*===================================
对595的en脚置低电平
=================================*/
assign CPLD_en=1'b0;
//assign CPLD_sclr_n=1'b1;
/*===================================
CPLD对ls138的控制,用来产生4-16的译码电路
控制
时钟---->sclk
输入: 4位控制电路
输出: 16位译码电路
计数器:counter1
方法:通过计数器来产生
功能:对16行进行不停的扫描
==================================*/
reg CPLD_lx;
assign CPLD_sclk=CPLD_clk;
always@(posedge CPLD_sclk or negedge cpld_rest)
begin
if(!cpld_rest)
CPLD_lx<=1'b0;
else if(CPLD_lx==15)
CPLD_lx<=1'b0;
else CPLD_lx<=CPLD_lx+1'b1;
end
/*=======================================
CPLD对hc595的控制:串行输入,并行输出八位数据
时钟: CPLD_sclk
输入: CPLD_rclk,CPLD_sclk,CPLD_sclr_n,CPLD_si,CPLD_en
输出: Q0-Q7;
功能:对led屏的列控制显示数据
=======================================*/
reg i;
reg display_data;//CPLD给si口送的数据
always@(posedge CPLD_sclk or negedge cpld_rest)
begin
if(!cpld_rest)
CPLD_sclr_n<=1'b0;
else if(i<8)
begin
i<=i+1'b1;
CPLD_si<=display_data;
display_data<=(display_data<<1'b1);
CPLD_rclk<=1'b0;
end
if(i==8)
CPLD_rclk<=1'b1;
end
/*========================================
CPLD对SRAM的控制:从ARM读取数据写入sram中并从sram中读取数据
送给display_data.
时钟:CPLD_clk.
输入:ARM_data,ARM_addr,ADDR17,ADDR18,cpld_rest.
输出:CPLD_ce,CPLD_oe,CPLD_we.
双向口:CPLD_data,CPLD_addr.
功能 :数据的储存读取
======================================*/
reg count;
assign CPLD_oe=1'b0;
assign CPLD_ce=1'b0;
always@(posedge CPLD_clk or negedge cpld_rest)
if(!cpld_rest)
count<=32'b0;
else if(count==3'b111)
count<=32'b0;
else
count<=count+1'b1;
always@(count)
case(count)
00: begin
CPLD_data<=ARM_data;
CPLD_addr<=ARM_addr;
end
01: begin
CPLD_we<=1'b0;
CPLD_addr<=CPLD_addr+1'b1;
end
10: begin
display_data<=CPLD_data;
end
11: begin
CPLD_we<=1'b1;
CPLD_addr<=CPLD_addr+1'b1;
end
endcase
endmodule 595kongzhi ,meiyou kankan
页:
[1]