zoukankan      html  css  js  c++  java
  • VmodCam top verilog

    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Company: 
    // Engineer: 
    // 
    // Create Date:    17:19:25 05/13/2014 
    //----------------------------------------------------------------------------------
    //-- Company: Digilent Ro
    //-- Engineer: xiabo
    //-- Design Name:		VmodCAM Reference Design 2
    //-- Module Name:    	VmodCAM_Ref - Behavioral
    //-- Project Name: 		
    //-- Target Devices: 
    //-- Tool versions: 
    //-- Description: The design shows off the video feed from two cameras located on
    //-- a VmodCAM add-on board connected to an Atlys. The video feeds are displayed on
    //-- a DVI-capable flat panel at 1600x900@60Hz resolution. Each of the video feeds
    //-- is written to a frame buffer port to different locations in the RAM. Switch 7
    //-- can change the display from one feed to the other.
    //--
    //-- Dependencies:
    //-- digilent VHDL library (Video, VideoTimingCtl, TWICtl, TMDSEncoder,
    //-- DVITransmitter, SerializerN_1...)
    //--
    //-- Revision: 
    //-- Revision 0.01 - File Created
    //-- Additional Comments: 
    //--
    //----------------------------------------------------------------------------------
    module VmodCAM_Ref #(
    	parameter	C3_NUM_DQ_PINS          = 16, 
    	parameter	C3_MEM_ADDR_WIDTH       = 13,
    	parameter	C3_MEM_BANKADDR_WIDTH   = 3
        )
    	(	
    	output	TMDS_TX_2_P ,
    	output	TMDS_TX_2_N ,
    	output	TMDS_TX_1_P ,
    	output	TMDS_TX_1_N ,
    	output	TMDS_TX_0_P ,
    	output	TMDS_TX_0_N ,
    	output	TMDS_TX_CLK_P ,
    	output	TMDS_TX_CLK_N ,
    	
    	input[7:0]	SW_I, 	   //: in STD_LOGIC_VECTOR(7 downto 0);
    	output[7:0]	LED_O ,		//: out STD_LOGIC_VECTOR(7 downto 0);
    	input	CLK_I ,				//: in  STD_LOGIC;
    	input	RESET_I ,				//: in  STD_LOGIC;
    //----------------------------------------------------------------------------------
    //-- Camera Board signals
    //----------------------------------------------------------------------------------
    	inout	   	CAMA_SDA ,//
    	inout	   	CAMA_SCL ,//
    	input[7:0]  CAMA_D_I ,//  STD_LOGIC_VECTOR (7 downto 0); -- inout Workaround for IN_TERM bug AR# 	40818
    	input	   	CAMA_PCLK_I ,// -- inout Workaround for IN_TERM bug AR# 	40818
    	output   	CAMA_MCLK_O , // out STD_LOGIC;		
    	input 		CAMA_LV_I ,// STD_LOGIC; -- inout Workaround for IN_TERM bug AR# 	40818
    	input 		CAMA_FV_I ,// STD_LOGIC; -- inout Workaround for IN_TERM bug AR# 	40818
    	output		CAMA_RST_O ,//out STD_LOGIC; --Reset active LOW
    	output		CAMA_PWDN_O ,//out STD_LOGIC; --Power-down active HIGH
    	
    	output		CAMX_VDDEN_O,//: out STD_LOGIC; //-- common power supply enable (can do power cycle)
    		
    	inout	  		CAMB_SDA ,//
    	inout	   	CAMB_SCL ,//
    	input[7:0]	CAMB_D_I ,//  STD_LOGIC_VECTOR (7 downto 0); -- inout Workaround for IN_TERM bug AR# 	40818
    	input	  	   CAMB_PCLK_I ,// -- inout Workaround for IN_TERM bug AR# 	40818
    	output   	CAMB_MCLK_O ,//: out STD_LOGIC;		
    	input	 	   CAMB_LV_I ,// STD_LOGIC; -- inout Workaround for IN_TERM bug AR# 	40818
    	input	  	   CAMB_FV_I ,// STD_LOGIC; -- inout Workaround for IN_TERM bug AR# 	40818
    	output   	CAMB_RST_O ,//: out STD_LOGIC; --Reset active LOW
    	output   	CAMB_PWDN_O,// : out STD_LOGIC; --Power-down active HIGH			  
    //----------------------------------------------------------------------------------
    //-- DDR2 Interface
    //----------------------------------------------------------------------------------
    	inout [C3_NUM_DQ_PINS-1 : 0]			mcb3_dram_dq           		,// inout  std_logic_vector(C3_NUM_DQ_PINS-1 downto 0);
    	output[C3_MEM_ADDR_WIDTH-1:0]			mcb3_dram_a                ,// out std_logic_vector(C3_MEM_ADDR_WIDTH-1 downto 0);
    	output[C3_MEM_BANKADDR_WIDTH-1:0]	mcb3_dram_ba               ,// out std_logic_vector(C3_MEM_BANKADDR_WIDTH-1 downto 0);
    	output										mcb3_dram_ras_n            ,// out std_logic;
    	output										mcb3_dram_cas_n            ,// out std_logic;
    	output										mcb3_dram_we_n             ,// out std_logic;
    	output										mcb3_dram_odt              ,// out std_logic;
    	output										mcb3_dram_cke              ,// out std_logic;
    	output										mcb3_dram_dm               ,// out std_logic;
    	output										mcb3_dram_udqs             ,// inout  std_logic;
    	inout											mcb3_dram_udqs_n          	,// inout  std_logic;
    	inout											mcb3_rzq                  	,// inout  std_logic;
    	inout											mcb3_zio                   ,// inout  std_logic;
    	output										mcb3_dram_udm              ,// out std_logic;
    	inout											mcb3_dram_dqs              ,// inout  std_logic;
    	inout											mcb3_dram_dqs_n            ,// inout  std_logic;
    	output										mcb3_dram_ck               ,// out std_logic;
    	output										mcb3_dram_ck_n              // out std_logic	
    	);
    //----------------------------------------------------------------------------------
    //-- System unit define
    //-- wire 
    //----------------------------------------------------------------------------------
    
    wire SysClk, PClk, PClkX2, SysRst, SerClk, SerStb ;//: std_logic;
    wire MSel; //: std_logic_vector(0 downto 0);
    
    wire VtcHs, VtcVs, VtcVde, VtcRst ;//: std_logic;
    wire VtcHCnt, VtcVCnt ;//: NATURAL;
    
    wire CamClk, CamClk_180, CamAPClk, CamBPClk, CamADV, CamBDV, CamAVddEn, CamBVddEn ;//: std_logic;
    wire [15:0] CamAD;
    wire [15:0] CamBD ;// std_logic_vector(15 downto 0);
    wire dummy_t, int_CAMA_PCLK_I, int_CAMA_FV_I, int_CAMA_LV_I,int_CAMB_PCLK_I, int_CAMB_FV_I, int_CAMB_LV_I; //: std_logic;
    wire [7:0] int_CAMA_D_I;
    wire [7:0] int_CAMB_D_I; // std_logic_vector(7 downto 0);
    
    wire ddr2clk_2x, ddr2clk_2x_180, mcb_drp_clk, pll_ce_0, pll_ce_90, pll_lock, async_rst ;//: std_logic;
    wire FbRdy, FbRdEn, FbRdRst, FbRdClk; //: std_logic;
    wire [15:0] FbRdData ;//: std_logic_vector(16-1 downto 0);
    wire FbWrARst, FbWrBRst, int_FVA, int_FVB ;//: std_logic;
    	
    assign LED_O = {VtcHs , VtcHs , VtcVde , async_rst , MSel , 3'b000}; 
    //----------------------------------------------------------------------------------
    //-- System Control Unit
    //-- This component provides a System Clock, a Synchronous Reset and other signals
    //-- needed for the 40:4 serialization:
    //--	- Serialization clock (5x System Clock)
    //-- - Serialization strobe
    //-- - 2x Pixel Clock
    //----------------------------------------------------------------------------------
    	  SysCon Inst_SysCon(
    		.CLK_I ( CLK_I),
    		.CLK_O ( open),
    		.RSTN_I ( RESET_I),
    		.SW_I ( SW_I),
    		.SW_O ( open),
    		.RSEL_O ( open), //--resolution selector synchronized with PClk
    	   .MSEL_O ( MSel), //--mode selector synchronized with PClk
    		.CAMCLK_O ( CamClk),
    		.CAMCLK_180_O ( CamClk_180),
    		.PCLK_O ( PClk),
    		.PCLK_X2_O ( PClkX2),
    		.PCLK_X10_O ( SerClk),
    		.SERDESSTROBE_O ( SerStb),
    		
    		.DDR2CLK_2X_O ( DDR2Clk_2x),
    		.DDR2CLK_2X_180_O ( DDR2Clk_2x_180),
    		.MCB_DRP_CLK_O ( mcb_drp_clk),
    		.PLL_CE_0_O ( pll_ce_0),
    		.PLL_CE_90_O ( pll_ce_90),
    		.PLL_LOCK ( pll_lock),
    		.ASYNC_RST ( async_rst)
    	);
    	
    //----------------------------------------------------------------------------------
    //-- Video Timing Controller
    //-- Generates horizontal and vertical sync and video data enable signals.
    //----------------------------------------------------------------------------------
    	VideoTimingCtl Inst_VideoTimingCtl    (
    		.PCLK_I ( PClk),
    		.RSEL_I ( R1600_900P),// --this project supports only 1600x900
    		.RST_I ( VtcRst),
    		.VDE_O ( VtcVde),
    		.HS_O ( VtcHs),
    		.VS_O ( VtcVs),
    		.HCNT_O ( VtcHCnt),
    		.VCNT_O ( VtcVCnt)
    	);
    assign 	VtcRst = async_rst |  (!FbRdy);
    //----------------------------------------------------------------------------------
    //-- Frame Buffer
    //----------------------------------------------------------------------------------
    		parameter DEBUG_EN = 0;
    		parameter COLORDEPTH = 16;
    	FBCtl    #(
    				.DEBUG_EN(DEBUG_EN),
    				.COLORDEPTH(COLORDEPTH)
    	)
    	Inst_FBCtl(
    		.RDY_O ( FbRdy),
    		.ENC ( FbRdEn),
    		.RSTC_I ( FbRdRst),
    		.DOC ( FbRdData),
    		.CLKC ( FbRdClk),
    		.RD_MODE ( MSel),
    		
    		.ENA ( CamADV),
    		.RSTA_I ( FbWrARst),
    		.DIA ( CamAD),
    		.CLKA ( CamAPClk),
    		
    		.ENB ( CamBDV),
    		.RSTB_I	( FbWrBRst),
    		.DIB ( CamBD),
    		.CLKB ( CamBPClk),
    		
    		.ddr2clk_2x ( DDR2Clk_2x),
    		.ddr2clk_2x_180 ( DDR2Clk_2x_180),
    		.pll_ce_0 ( pll_ce_0),
    		.pll_ce_90 ( pll_ce_90),
    		.pll_lock ( pll_lock),
    		.async_rst ( async_rst),
    		.mcb_drp_clk ( mcb_drp_clk),
    		.mcb3_dram_dq ( mcb3_dram_dq),
    		.mcb3_dram_a ( mcb3_dram_a),
    		.mcb3_dram_ba ( mcb3_dram_ba),
    		.mcb3_dram_ras_n ( mcb3_dram_ras_n),
    		.mcb3_dram_cas_n ( mcb3_dram_cas_n),
    		.mcb3_dram_we_n ( mcb3_dram_we_n),
    		.mcb3_dram_odt ( mcb3_dram_odt),
    		.mcb3_dram_cke ( mcb3_dram_cke),
    		.mcb3_dram_dm ( mcb3_dram_dm),
    		.mcb3_dram_udqs ( mcb3_dram_udqs),
    		.mcb3_dram_udqs_n ( mcb3_dram_udqs_n),
    		.mcb3_rzq ( mcb3_rzq),
    		.mcb3_zio ( mcb3_zio),
    		.mcb3_dram_udm ( mcb3_dram_udm),
    		.mcb3_dram_dqs ( mcb3_dram_dqs),
    		.mcb3_dram_dqs_n ( mcb3_dram_dqs_n),
    		.mcb3_dram_ck ( mcb3_dram_ck),
    		.mcb3_dram_ck_n ( mcb3_dram_ck_n)
    	);
    
    assign FbRdEn   = VtcVde;
    assign FbRdRst  = async_rst;
    assign FbRdClk  = PClk;
    //--Register FV signal to meet timing for FbWrXRst
    	InputSync Inst_InputSync_FVA(
    		.D_I ( int_CAMA_FV_I),
    		.D_O ( int_FVA),
    		.CLK_I ( CamAPClk)
    	);
    	InputSync Inst_InputSync_FVB(
    		.D_I ( int_CAMB_FV_I),
    		.D_O ( int_FVB),
    		.CLK_I ( CamBPClk)
    	);
    
    assign FbWrARst = async_rst | ( !int_FVA);
    assign FbWrBRst = async_rst | ( !int_FVB);
    
    
    //----------------------------------------------------------------------------------
    //-- DVI Transmitter
    //----------------------------------------------------------------------------------
    wire [7:0] FbRdData_Red;
    wire [7:0] FbRdData_Green;
    wire [7:0] FbRdData_Blue;
    assign FbRdData_Red   = {FbRdData[15 : 11],3'b000};
    assign FbRdData_Green = {FbRdData[10 : 5] ,2'b00 };
    assign FbRdData_Blue  = {FbRdData[4 : 0]  ,3'b000};
    
    	DVITransmitter Inst_DVITransmitter(
    //		.RED_I ( FbRdData[15 : 11] & "000"),
    //		.GREEN_I ( FbRdData[10 : 5] & "00"),
    //		.BLUE_I ( FbRdData[4 : 0] & "000"),
    		.RED_I ( FbRdData_Red),
    		.GREEN_I ( FbRdData_Green),
    		.BLUE_I ( FbRdData_Blue),
    		.HS_I ( VtcHs),
    		.VS_I ( VtcVs),
    		.VDE_I ( VtcVde),
    		.PCLK_I ( PClk),
    		.PCLK_X2_I ( PClkX2),
    		.SERCLK_I ( SerClk),
    		.SERSTB_I ( SerStb),
    		.TMDS_TX_2_P ( TMDS_TX_2_P),
    		.TMDS_TX_2_N ( TMDS_TX_2_N),
    		.TMDS_TX_1_P ( TMDS_TX_1_P),
    		.TMDS_TX_1_N ( TMDS_TX_1_N),
    		.TMDS_TX_0_P ( TMDS_TX_0_P),
    		.TMDS_TX_0_N ( TMDS_TX_0_N),
    		.TMDS_TX_CLK_P ( TMDS_TX_CLK_P),
    		.TMDS_TX_CLK_N ( TMDS_TX_CLK_N)
    	);
    
    //----------------------------------------------------------------------------------
    //-- Camera A Controller
    //----------------------------------------------------------------------------------
    	camctl Inst_camctlA(
    		.D_O ( CamAD),
    		.PCLK_O ( CamAPClk),
    		.DV_O ( CamADV),
    		.RST_I ( async_rst),
    		.CLK ( CamClk),
    		.CLK_180 ( CamClk_180),
    		.SDA ( CAMA_SDA),
    		.SCL ( CAMA_SCL),
    		.D_I ( CAMA_D_I),
    		.PCLK_I ( CAMA_PCLK_I),
    		.MCLK_O ( CAMA_MCLK_O),
    		.LV_I ( CAMA_LV_I),
    		.FV_I ( CAMA_FV_I),
    		.RST_O ( CAMA_RST_O),
    		.PWDN_O ( CAMA_PWDN_O),
    		.VDDEN_O ( CamAVddEn)
    	);
    //----------------------------------------------------------------------------------
    //-- Camera B Controller
    //----------------------------------------------------------------------------------
    	camctl Inst_camctlB(
    		.D_O ( CamBD),
    		.PCLK_O ( CamBPClk),
    		.DV_O ( CamBDV),
    		.RST_I ( async_rst),
    		.CLK ( CamClk),
    		.CLK_180 ( CamClk_180),
    		.SDA ( CAMB_SDA),
    		.SCL ( CAMB_SCL),
    		.D_I ( CAMB_D_I),
    		.PCLK_I ( CAMB_PCLK_I),
    		.MCLK_O ( CAMB_MCLK_O),
    		.LV_I ( CAMB_LV_I),
    		.FV_I ( CAMB_FV_I),
    		.RST_O ( CAMB_RST_O),
    		.PWDN_O ( CAMB_PWDN_O),
    		.VDDEN_O ( CamBVddEn)
    	);
    assign 	CAMX_VDDEN_O = CamAVddEn && CamBVddEn;
    	
    	
    endmodule
    

    人生天地之间,若白驹之过郤(隙),忽然而已
  • 相关阅读:
    麻省理工算法导论学习笔记(1)算法介绍
    麻省理工算法导论学习笔记(2)渐近符号、递归及解法
    Mybatis if 标签 判断不生效
    Linux permission denied解决方法?
    MySQL查找是否存在
    List集合数据去重
    Java获取list集合的前几个元素
    git如何新建(修改)分支
    asp.net下url参数含有中文读取后为乱码
    时间复杂度为O(n)的排序算法
  • 原文地址:https://www.cnblogs.com/xiabodan/p/4038619.html
Copyright © 2011-2022 走看看