yuexinjie 发表于 2010-12-14 10:56:16

我写的小程序,不知道对错噻!

/*=================================
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

yuexinjie 发表于 2010-12-14 13:09:48

595kongzhi ,meiyou kankan
页: [1]
查看完整版本: 我写的小程序,不知道对错噻!