📄 232-fddi.v
字号:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 14:22:38 10/07/2007 // Design Name: // Module Name: App // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module CANtoFDDI(CAN_RX, CAN_TX, FDDI_RX, FDDI_TX, CLK, LED_TX, LED_RX, SD); //, Ja,Jb input CAN_RX; output CAN_TX; input FDDI_RX; output FDDI_TX; input SD; input CLK; output LED_TX; output LED_RX; //output Ja; //output Jb; //CANRX to FDDITX reg[3:0] fTX_CLK; reg fTX_Start; reg fTX_T; reg fTX_Tem; reg fTX_Over;//输出完毕 reg fTX_N;//输出第N位(001/110) //reg FDDI_TX; ////////////////// //FDDIRX to CANTX reg cTX_Start; //reg[7:0] fRX_Bit; //reg[3:0] fBit_N; reg[3:0] cTX_Data; reg[2:0] cTX_DataN; reg[3:0] fBit_Bit; reg fBit_Value; reg cTX_Tem; reg LED_RXTem; reg LED_TXTem; ///////////////// //////////////////////////// //100us延时 //reg TXRTime[7:0]; //reg TXRTime_Start; //////////////////////////// initial begin fTX_CLK=0; fTX_Start=1; fTX_Tem=0; fTX_Over=0; fTX_N=0; //fddi rx to CAN tx cTX_Start=0;//f //fBit_N=0; //fRX_Bit=0; cTX_DataN=0; cTX_Data=0; fBit_Bit=0; //cTX_Data=0; LED_RXTem=0; LED_TXTem=0; //TXRTime=0; //TXRTime_Start=0; end/////////////////////////////*/////////////////////////////// //function toBit function toBit; input [1:0] Bit_Tem; begin case (Bit_Tem) 2'b00, 2'b10 : toBit=0; 2'b11, 2'b01 : toBit=1; default : toBit=0; endcase end endfunction///////////////////////////////*//////////////////////////////////FDDIRX to CANTX 检测上升和下降沿 always @(negedge CLK)// cTX_Start begin if (fBit_Bit==0) begin fBit_Value=~FDDI_RX; // 编码 fBit_Bit=1; end else begin if (fBit_Value==FDDI_RX) // begin fBit_Value=fBit_Value>>1; fBit_Bit=3; fBit_Value=~FDDI_RX; //cTX_Data=0; //cTX_DataN=0; end else begin fBit_Bit=fBit_Bit+1; if (fBit_Bit>3) begin if (cTX_DataN<3) begin if (fBit_Value==1) begin cTX_Data[cTX_DataN]=1; end else begin cTX_Data[cTX_DataN]=0; end cTX_DataN=cTX_DataN+1; if (cTX_DataN>2) begin if (cTX_Data==3'b110) begin cTX_Tem=1; cTX_DataN=0; LED_TXTem=1; end else begin if (cTX_Data==3'b001) begin cTX_Tem=0; cTX_DataN=0; LED_TXTem=0; end else begin cTX_Data=cTX_Data>>1; cTX_DataN=2; end end end end fBit_Bit=0; end//fBit_Bit>7 end//(fBit_Value==FDDI_RX) end//fBit_Bit==0 end//always ///////////////////////////////////////////////////////////////////////////FDDI_RX CLK always @(negedge CLK)//GET F begin //cTX_Start=!cTX_Start; if (fTX_CLK<1)//8分频 begin fTX_CLK=fTX_CLK+1; end else begin fTX_Start=~fTX_Start; fTX_CLK=0; end end /////////////////////////////////////////// /////////////////////////////////////////// always @(negedge fTX_Start)// CAN_RX to FDDI_TX begin if (fTX_Over==0) begin if (CAN_RX==0)//RS232低电平时为1 begin fTX_T=1; LED_RXTem=1; end else begin fTX_T=0; LED_RXTem=0; end fTX_Tem=fTX_T;//输出第1位 fTX_Over=1;//未输出完 fTX_N=0;// 乱桓鲋芷谑涑龅2位 end else begin if (fTX_T==1) begin if (fTX_N==0) begin fTX_Tem=1; fTX_N=1;//输出下一位 end else begin fTX_Tem=0; fTX_Over=0;//输出完毕 end end else begin if (fTX_N==0) begin fTX_Tem=0; fTX_N=1; end else begin fTX_Tem=1; fTX_Over=0; end end end end//CANRX to FDDITX //////////////////////////// //CANRX to FDDITX assign FDDI_TX=fTX_Tem;// // 编码1=001 当编码1=110时 FDDI_TX=~fTX_Tem; //////////////////////////// /////////////////////////// //FDDIRX to CANTX assign CAN_TX=cTX_Tem && SD;//编码1=001 当编码1=110时 CAN_TX=~(cTX_Tem && SD) //assign Ja=FDDI_RX;//~LED_TXTem;//~fTX_Tem;// //assign Jb=CLK;// //assign J4=cTX_Tem; /////////////////////////// /////////////////////////// assign LED_TX=~LED_TXTem;//LED_TXTem;//CAN_TX为高电平不亮 assign LED_RX=~LED_RXTem;//LED_RXTem;//RX=1不亮,RX=0亮 ///////////////////////////endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -