⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_mp3_dual.v

📁 USBRTL电路的VHDL和Verilog代码
💻 V
字号:

module usb_mp3_dual
	(
                clock48,        // 48 MHz clock
                rcvin,          // differential in
                vpin,           // plus in
                vmin,
                pwronresetb,    // core         - 1   // 5

                card_ready,     // sm           - 1  input R/nB客 悼老 signal
                io,             // sm           - 8  inout
                vmo,
                vpo,
                suspend,
                usboen,

                ale,            // sm           - 1  tri_output
                cle,            // sm           - 1  tri_output
                reb,            // sm           - 1  tri_output
                web,            // sm           - 1  tri_output
                wpb,            // sm           - 1  tri_output // 14

                data_in_mcu,    // mmc to mcu   - 1  input  
                data_out_mcu,   // mmc to mcu   - 1  output
                clk_mcu,        // mmc to mcu   - 1  output
                data_cf_in,     // mmc          - 1  inout
                data_fc_out,    // mmc          - 1  inout  
                clock_fc_out,   // mmc          - 1  tri_output  // 6


                gpiopin0,          //              - 1  input ----- scan_in1
                gpiopin1,          //              - 1  input ----- scan_in2
                gpiopin2,          //              - 1  input
                gpiopin3,          //              - 1  tri_output
                gpiopin4,          //              - 1  tri_output
                gpiopin5,          //              - 1  output // cs_fc_out (mcu) 
                gpiopin6,          //              - 1  output ----- scan_out1
                gpiopin7,          //              - 1  output ----- scan_out2 // 8

                test0,          //              - 1  input 
                test1,          //              - 1  input  // test mode : 00 normal
                                                            //             01 tranceiver test
                                                            //             10 SM_MMC test
                                                            //             11 GPIO test
                test2,          //              - 1  input  // asyncreset pin
                test3,          //              - 1  input scan enable
                test4,          //              - 1  input 
                test5,          //              - 1  output 
                test6,          //              - 1  output
                test7,          //              - 1  output(disablebus for sm)
                test8,          //              - 1  output(out_enableb for sm)
                test9,          //              - 1  output(dataout_dat_enable)
                test10          //              - 1  output(datain_cmd_enable) //  11
                                                     //  44 + power(4) = 48 pins
	);
  
  input       clock48 ,rcvin, vpin , vmin   ;
  input       pwronresetb;

  input       gpiopin0,gpiopin1,gpiopin2;
  output      gpiopin3,gpiopin4,gpiopin5;
  output      gpiopin6,gpiopin7;                           // tri_output

  input       test0,test1,test2,test3,test4;
  output      test5,test6,test7,test8,test9,test10;
  output      usboen, suspend , vmo, vpo ;

  input       card_ready;
  
  inout [7:0] io;
  output      ale;
  output      cle;
  output      reb;
  output      web;
  output      wpb;

  output       clk_mcu;
  input       data_in_mcu;
  output      data_out_mcu;
  inout	      data_cf_in;
  inout       data_fc_out;
  output      clock_fc_out;
  //output      cs_fc_out;



wire        mcclockout;
wire        mcclock;
wire        usbclockout;
wire        usbclock;
wire[7:0] smart_rd_data;
wire[7:0] smart_wr_data;
wire                 pwronresetb_in;
wire                 card_ready_in;
//wire                 cs_fc_out;
wire                 ale;
wire                 cle;
wire                 reb;
wire                 web;
wire                 wpb;
wire                 clock_fc_out;
wire	             clock_in;
wire                 ale_out,reb_out,web_out,wpb_out,cle_out;
wire test0_in;
wire test1_in;
wire test2_in;
wire test3_in;
wire test4_in;

wire                 testmode;
assign               testmode = test0_in|test1_in;
wire     [1:0]       testselect;
assign               testselect = {test0_in,test1_in};

test_clock_mux u0_test_clock_mux(
                                 .in1(clock48), 
                                 .in2(usbclockout), 
                                 .in3(mcclockout), 
                                 .enable(testmode), 
                                 .out1(usbclock), 
                                 .out2(mcclock)
                                );
wire vpin;
wire vmin;
wire rcvin;
wire gpiopin5_out;
wire gpiopin6_out;
wire gpiopin7_out;

wire data_out;
wire clk_mcu;

wire suspend;
wire usboen;
wire vpo;
wire vmo;

wire data_in_mcu_in;

wire gpiopin0_in;
wire gpiopin1_in;
wire gpiopin2_in;

wire test5_out;
wire test6_out;
wire test7_out;
wire test8_out;
wire test9_out;
wire test10_out;

wire vpinin;
wire vminin;
wire rcvinin;

wire gpiopin5_outout;
wire gpiopin6_outout;
wire gpiopin7_outout;

wire data_out_mcu_out;
wire clk_mcu_out;

wire suspendsuspend;
wire usboenusboen;
wire vpovpo;
wire vmovmo;

assign   pwronresetb_in = pwronresetb ;
assign   card_ready_in = card_ready ; 
assign   test0_in = test0 ; 
assign   test1_in = test1 ; 
assign   test2_in = test2 ; 
assign   test3_in = test3 ; 
assign   test4_in = test4 ; 
assign   test5 = test5_out ; 
assign   test6 = test6_out ; 
assign   test7 = test7_out ; 
assign   test8 = test8_out ; 
assign   test9 = test9_out ; 
assign   test10 = test10_out ; 
assign   gpiopin0_in = gpiopin0 ; 
assign   gpiopin1_in = gpiopin1 ; 
assign   gpiopin2_in = gpiopin2 ; 
assign   gpiopin5 = gpiopin5_outout ; 
assign   gpiopin6 = gpiopin6_outout ; 
assign   gpiopin7 = gpiopin7_outout ; 
assign   card_ready_in = card_ready ; 
assign   ale = ale_out ; 
assign   cle = cle_out ; 
assign   web = web_out ; 
assign   reb = reb_out ; 
assign   wpb = wpb_out ; 
assign   clk_mcu = clk_mcu_out ; 
assign   data_out_mcu = data_out_mcu_out ; 
assign   data_in_mcu_in = data_in_mcu ; 

assign    test5_out = suspend;
assign    test6_out = vmo;

test_mux u0_test_mux(
                .testselect(testselect),
                .vpin(vpin),
                .vmin(vmin),
                .rcvin(rcvin),
                .gpiopin5_out(gpiopin5_out),
                .gpiopin6_out(gpiopin6_out),
                .gpiopin7_out(gpiopin7_out),
                .data_out(data_outout),
                .clk_mcu(clk_mcumcu),
                .suspend(suspend),
                .usboen(usboen),
                .vpo(vpo),
                .vmo(vmo),
                .card_ready_in(card_ready_in),
                .data_in_mcu_in(data_in_mcu_in),
                .gpiopin0_in(gpiopin0_in),
                .gpiopin1_in(gpiopin1_in),
                .gpiopin2_in(gpiopin2_in),
                .test4_in(test4_in),

                .vpinin(vpinin),
                .vminin(vminin),
                .rcvinin(rcvinin),
                .gpiopin5_outout(gpiopin5_outout),
                .gpiopin6_outout(gpiopin6_outout),
                .gpiopin7_outout(gpiopin7_outout),

                .data_out_mcu_out(data_out_mcu_out),
                .clk_mcu_out(clk_mcu_out),

                .suspendsuspend(suspendsuspend),
                .usboenusboen(usboenusboen),
                .vpovpo(vpovpo),
                .vmovmo(vmovmo)
               );

Uusb_dual  usb_mmc_sm (
                // inputs from bus
                .pwronresetb( pwronresetb_in),
                .testmode(testmode),
                .testreset(test2_in),
                //.enmmc( 'b0),
                .clock48( clock48),

                .rcvin(rcvinin),
                .vpin(vpinin),
                .vmin(vminin),
                .gpiopin0(gpiopin0_in),
                .gpiopin1(gpiopin1_in),
                .gpiopin2(gpiopin2_in),
                .dataout_dat_in(dataout_dat_in),
                .dataout_dat_out(dataout_dat_out),
                .dataout_dat_enable(dataout_dat_enable),
                .card_ready(card_ready_in),
                .smart_rd_data(smart_rd_data),
                .vmo(vmo),
                .vpo(vpo),            // plus out
                .usboen(usboen), // oe for usb bits
                .suspend(suspend),
                .disablebus(disablebus),
                .data_in(data_in_mcu_in),
//                .cs_fc_out(cs_fc_out_out),
                .clock_fc_out(clock_fc_out_out),
                .datain_cmd_in(datain_cmd_in),
                .datain_cmd_out(datain_cmd_out),
                .datain_cmd_enable(datain_cmd_enable),
                .mcclock_out(mcclockout),
                .mcclock(mcclock),
                .gpiopin3(gpiopin3_out),
                .gpiopin4(gpiopin4_out),
                .gpiopin5(gpiopin5_out),
                .gpiopin6(gpiopin6_out),
                .gpiopin7(gpiopin7_out),
                .data_out(data_outout),
                .clk_mcu(clk_mcumcu),
                .ale(ale_out),
                .cle(cle_out),
                .reb(reb_out),
                .web(web_out),
                .usbclock(usbclock),
                .usbclockout(usbclockout),
                .wpb(wpb_out),
                .out_enable(out_enable),
                .smart_wr_data(smart_wr_data)
                );


endmodule

module test_clock_mux(in1, in2, in3, enable, out1, out2);
input in1;
input in2;
input in3;
input enable; 
output out1;
output out2;
    
assign out1 = (enable)? in1 : in2;
assign out2 = (enable)? in1 : in3;
endmodule

module test_mux(
                testselect,
                vpin,
                vmin,
                rcvin,
                gpiopin5_out,
                gpiopin6_out,
                gpiopin7_out,
                data_out,
                clk_mcu,
                suspend,
                usboen,
                vpo,
                vmo,
                card_ready_in,
                data_in_mcu_in,
                gpiopin0_in,
                gpiopin1_in,
                gpiopin2_in,
                test4_in,

                vpinin,
                vminin,
                rcvinin,
                gpiopin5_outout,
                gpiopin6_outout,
                gpiopin7_outout,
                data_out_mcu_out,
                clk_mcu_out,
                suspendsuspend,
                usboenusboen,
                vpovpo,
                vmovmo
               );

input [1:0] testselect;
input vpin;
input vmin;
input rcvin;
input gpiopin5_out;
input gpiopin6_out;
input gpiopin7_out;
input data_out;
input clk_mcu;
input suspend;
input usboen;
input vpo;
input vmo;
input card_ready_in;
input data_in_mcu_in;
input gpiopin0_in;
input gpiopin1_in;
input gpiopin2_in;
input test4_in;

output vpinin;
output vminin;
output rcvinin;
output gpiopin5_outout;
output gpiopin6_outout;
output gpiopin7_outout;
output data_out_mcu_out;
output clk_mcu_out;
output suspendsuspend;
output usboenusboen;
output vpovpo;
output vmovmo;

reg vpinin;
reg vminin;
reg rcvinin;
reg gpiopin5_outout;
reg gpiopin6_outout;
reg gpiopin7_outout;
reg data_out_mcu_out;
reg clk_mcu_out;
reg suspendsuspend;
reg usboenusboen;
reg vpovpo;
reg vmovmo;

always @(testselect or vpin or vmin or rcvin or gpiopin5_out or gpiopin6_out or gpiopin7_out or data_out or clk_mcu or suspend or usboen or vpo or vmo or card_ready_in or data_in_mcu_in or gpiopin0_in or gpiopin1_in or gpiopin2_in or test4_in )
  begin
    case(testselect)
      2'b00 :
        begin
          vpinin = vpin;
          vminin = vmin;  
          rcvinin = rcvin;

          gpiopin5_outout = gpiopin5_out;
          gpiopin6_outout = gpiopin6_out;
          gpiopin7_outout = gpiopin7_out;

          data_out_mcu_out = data_out;
          clk_mcu_out = clk_mcu;

          suspendsuspend = suspend;
          usboenusboen = usboen;
          vpovpo = vpo;
          vmovmo = vmo;
        end
      2'b01 :
        begin
          vpinin = vpin;
          vminin = vmin;  
          rcvinin = rcvin;

          gpiopin5_outout = vpin;
          gpiopin6_outout = vmin;
          gpiopin7_outout = rcvin;

          data_out_mcu_out = data_out;
          clk_mcu_out = clk_mcu;

          suspendsuspend = card_ready_in;
          usboenusboen = data_in_mcu_in;
          vpovpo = gpiopin0_in;
          vmovmo = gpiopin1_in;
        end
      2'b10 :
        begin
          vpinin = gpiopin0_in;
          vminin = gpiopin1_in;  
          rcvinin = gpiopin2_in;

          gpiopin5_outout = suspend;
          gpiopin6_outout = usboen;
          gpiopin7_outout = vpo;

          data_out_mcu_out = data_out;
          clk_mcu_out = clk_mcu;

          suspendsuspend = suspend;
          usboenusboen = usboen;
          vpovpo = vpo;
          vmovmo = vmo;

//          test6_out = vmo;
        end
      2'b11 :
        begin
          vpinin = card_ready_in;
          vminin = data_in_mcu_in;
          rcvinin = test4_in;

          gpiopin5_outout = gpiopin5_out;
          gpiopin6_outout = gpiopin6_out;
          gpiopin7_outout = gpiopin7_out;

          data_out_mcu_out = vpo;
          clk_mcu_out = usboen;

          suspendsuspend = suspend;
          usboenusboen = usboen;
          vpovpo = vpo;
          vmovmo = vmo;

//          test5_out = suspend;
//          test6_out = vmo;
        end
    endcase
  end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -