📄 usb_mp3_dual.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 + -