打印

期待大家的加入-源代码共享

[复制链接]
7438|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinetech|  楼主 | 2010-7-30 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
准备整理部分曾经做过的项目的源代码程序,上传上来。希望能够给初学者或者有急需的朋友一点帮助。期待大家的加入。
      上传的要求:
      1 最好是自己原创,如果不是,必须经过严谨的测试和验证,力保没有问题;
      2 对上传的程序做必要的文字说明,以便让大家对你的程序功能有所了解;
      3 必须具有良好的代码风格,方便大家阅读;
      4 在关键处需有必要的注释。
      暂时提几点要求,如果大家有更好的建议,随时补充。

相关帖子

沙发
汉江之源| | 2010-7-31 20:12 | 只看该作者
zhichi

使用特权

评论回复
板凳
sinetech|  楼主 | 2010-7-31 20:55 | 只看该作者
PFGA与USB的通信实现,USB采用赛普拉斯的EZ-USB。程序包括两部分:发送和接收。每路都包括一个缓冲区和一个FIFO及校验计算逻辑。发送逻辑监控发送缓冲区的写入口地址总线,对偏移0xFF的操作,视为命令长度,并触发发送操作。命令发送时,首先发送到发送FIFO中,然后根据USB总线的忙闲状态,从FIFO中读取数据,并计算校验和,在达到命令长度后将校验和发送到USB上。接收逻辑监控USB总线,有数据时根据状态机工作。首先,读到包头后,就接受命令里指定长度的数据,然后进行校验计算,如果通过校验,就产生中断信号。

module usbctrl (nrst,
   unrst, uclk, udata, uflaga, uflagb, uflagc, uncs, unrd, unwr, uaddr, upktend,
   txdata, txaddr, txbsy,   txlatch, txclk,
   rxdata, rxaddr, rxlatch, rxclk, rxirq,
   upktend_en
   );
   
`include "REGADDRDEF.h"
  
  input   nrst, uclk, uflaga, uflagb, uflagc;
  output  uncs, unrd, unwr, upktend, unrst;
  reg     unwr;
  //wire    uncs;
  output  [1:0]  uaddr;
  reg     [1:0]  uaddr;
  inout   [15:0] udata;
  
  input   [15:0] txdata;
  input   [7:0]  txaddr;
  output         txbsy;
  //reg            txbsy;
  input          txlatch, txclk;
  output       [15:0] rxdata;
  input          [7:0]  rxaddr;
  input          rxlatch, rxclk;
  output         rxirq;

  input          upktend_en;

  assign unrst = nrst;


//----------------------------------------------------------
//      ARM Control Signal
  reg rxcmdbuf_clear;
  reg [2:0]rxcmdbuf_clear_cnt;
  
  always @(posedge rxclk or negedge nrst)
    if (~nrst)
      rxcmdbuf_clear_cnt <= #REGOUT 3'hF;
    else if (rxlatch)
      rxcmdbuf_clear_cnt <= #REGOUT 3'h0;
    else if (~&rxcmdbuf_clear_cnt)
      rxcmdbuf_clear_cnt <= #REGOUT rxcmdbuf_clear_cnt + 1'b1;
   
  always @(posedge rxclk or negedge nrst)
    if (~nrst)
      rxcmdbuf_clear <= #REGOUT 1'b0;
    else                                     // Edit the logic to clear the
      rxcmdbuf_clear <= #REGOUT ~&rxcmdbuf_clear_cnt;        // flag after read the command
   

  
  //----------------------------------------------------------
  //         USB Bus Control
  `define BUSST_IDLE  2'b00
  `define BUSST_RD    2'b10
  `define BUSST_WR    2'b11
  
  wire   rx_empty = ~uflagb;
  wire   tx_full  = ~uflagc;
  
  reg  [1:0] bus_stm, bus_stm_next;
  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      bus_stm <= #REGOUT 2'b00;
    else
      bus_stm <= #REGOUT bus_stm_next;
  
  wire rxbufok, txbufok;
  wire can_rx  = ~rx_empty & rxbufok;   // low assert
  wire can_tx  = ~tx_full  & txbufok;   // low assert
  
  always @(bus_stm or can_rx or can_tx)
    if (bus_stm == `BUSST_IDLE)
    begin
      if (can_rx)
        bus_stm_next = `BUSST_RD;
      else if (can_tx)
        bus_stm_next = `BUSST_WR;
      else
        bus_stm_next = `BUSST_IDLE;   
    end
   
    else if (bus_stm == `BUSST_RD)
    begin
      if (can_rx)
        bus_stm_next = `BUSST_RD;
      else
        bus_stm_next = `BUSST_IDLE;
    end
   
    else if (bus_stm == `BUSST_WR)
    begin
      if (can_tx)
        bus_stm_next = `BUSST_WR;
      else
        bus_stm_next = `BUSST_IDLE;
    end
   
    else
      bus_stm_next = `BUSST_IDLE;
  
  assign unrd = ~((bus_stm == `BUSST_RD) && can_rx);
//  
//  always @(posedge uclk)
//    uncs <= #REGOUT ~bus_stm[1]; //unwr & unrd;
//   
  assign uncs =  ~bus_stm[1]; //unwr & unrd;
  
  
  reg  [15:0] udatao;
  assign udata = (unwr) ? 16'hZZZZ : udatao;
      
//  reg unwr_r;

// wire   txusbbuf_rd;
  reg   txusbbuf_rd;
  
  always @(posedge uclk)
    unwr <= #REGOUT ~txusbbuf_rd;

//  assign  unwr =  ~((bus_stm == `BUSST_WR) && can_tx);
   
//  always @(posedge uclk)
//    unwr <= #REGOUT unwr_r;
   
  always @(posedge uclk)
    uaddr <= #REGOUT (bus_stm == `BUSST_WR) ? TXENDPOINT : RXENDPOINT;

//  assign  uaddr =  (bus_stm == `BUSST_WR) ? TXENDPOINT : RXENDPOINT;
  
//----------------------------------------------------------
//             rx logic


  reg  rxcmd_valid, rxcmd_invalid;
  reg  rx_stm, rx_stm_next;
   
  wire       usb_datain_buf_ren;
  wire       usb_datain_buf_rdempty;
  wire [7:0] usb_datain_buf_dout;
  wire       usb_datain_buf_full;
  assign     rxbufok = ~usb_datain_buf_full;
         
  reg        usb_datain_buf_wrreq;
  
  always @(posedge uclk)
    usb_datain_buf_wrreq <= #REGOUT ~unrd;
  
  fifo16_8 usb_datain_buf_inst(
    .aclr(~nrst),
          .data(udata),
          .wrclk(uclk),
          .wrreq(~unrd), //(usb_datain_buf_wrreq),
          .wrfull(usb_datain_buf_full),
          .rdclk(uclk),
          .rdreq(usb_datain_buf_ren),
          .rdempty(usb_datain_buf_rdempty),
          .q(usb_datain_buf_dout)
        );
       
  reg  rxcmdbuf_ok;
       
  // indicated that the ARM has get the data
  reg rxcmdbuf_clear_d;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      begin
        rxcmdbuf_clear_d  <= #REGOUT 1'b0;
        rxcmdbuf_ok       <= #REGOUT 1'b1;
      end
    else
      begin
        rxcmdbuf_clear_d  <= #REGOUT rxcmdbuf_clear;
        
        if (rxcmdbuf_ok)
          rxcmdbuf_ok     <= #REGOUT ~rxcmd_valid;
        else
          rxcmdbuf_ok     <= #REGOUT rxcmdbuf_clear_d;
      end
      
  assign usb_datain_buf_ren = ~usb_datain_buf_rdempty & rxcmdbuf_ok;       
  
  reg  [8:0] rxcmdbuf_wraddr;  
  wire [7:0] rxcmdbuf_din = usb_datain_buf_dout;
       
  wire       rxcmdbuf_wrclk = uclk;
  reg        rxcmdbuf_wren;
  
  wire [7:0] rxcmdbuf_rdaddr = rxaddr;
  wire       rxcmdbuf_rdclk  = rxclk;
  wire [15:0]rxcmdbuf_dout ;
  
  assign  rxdata = rxcmdbuf_dout;
   
  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmdbuf_wren <= #REGOUT 1'b0;
    else
      rxcmdbuf_wren <= usb_datain_buf_ren && rx_stm_next == 1'b1;
            
  rxcmdbuf rxcmdbuf_inst(
          .data(rxcmdbuf_din),
          .wraddress(rxcmdbuf_wraddr),
          .wrclock(rxcmdbuf_wrclk),
          .wren(rxcmdbuf_wren),
          .rdaddress(rxcmdbuf_rdaddr),
          .rdclock(rxcmdbuf_rdclk),
          .q(rxcmdbuf_dout)
        );
   
  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rx_stm <= #REGOUT 1'b0;
    else
      rx_stm <= #REGOUT rx_stm_next;
  
  wire rst_rxstm;
  always @(rx_stm or rxcmd_invalid or rxcmd_valid or usb_datain_buf_dout or usb_datain_buf_ren or rst_rxstm)
    if (rst_rxstm)
      rx_stm_next = 1'b0;
   
    else if (rx_stm == 1'b0)
    begin
      if (usb_datain_buf_dout == USBRXCMDHEAD && usb_datain_buf_ren)
        rx_stm_next = 1'b1;
      else
        rx_stm_next = 1'b0;
    end
    else
    begin
      if (rxcmd_valid || rxcmd_invalid)
        rx_stm_next = 1'b0;
      else
        rx_stm_next = 1'b1;
    end

  reg [15:0] rxcmd_len;
  reg [7:0]  rxcmd_chksum;
  assign rst_rxstm = rxcmdbuf_wraddr > 2 && rxcmd_len > 64 && ~&rxcmd_len;
  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmd_len <= #REGOUT 16'hFFFF;
      
    else if (rxcmdbuf_wraddr == 9'h001)
      rxcmd_len[7:0] <= #REGOUT rxcmdbuf_din; //{8'h00, rxcmdbuf_din + 1'b1};
    else if (rxcmdbuf_wraddr == 9'h002)
      rxcmd_len[15:8] <= #REGOUT rxcmdbuf_din; //{rxcmdbuf_din, 8'h00} + rxcmd_len;
   
    else if (rx_stm == 1'b0)
      rxcmd_len <= #REGOUT 16'hFFFF;
      
      
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmdbuf_wraddr <= #REGOUT {9{1'b0}};
    else if (rxcmdbuf_wren && rxcmdbuf_ok)
      rxcmdbuf_wraddr <= #REGOUT rxcmdbuf_wraddr + 1'b1;
    else if (~rx_stm | ~rxcmdbuf_ok)
      rxcmdbuf_wraddr <= #REGOUT {9{1'b0}};
      
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmd_chksum <= #REGOUT 8'h00;
    else if (~rx_stm)
      rxcmd_chksum <= #REGOUT USBRXCMDHEAD;
    else if (rxcmdbuf_wren)    ////****
      rxcmd_chksum <= #REGOUT rxcmd_chksum + rxcmdbuf_din;
     
  
  wire cmp_r = rxcmd_chksum == usb_datain_buf_dout;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmd_invalid <= #REGOUT 1'b0;
    else if (rxcmd_len + 2 == {7'h00,rxcmdbuf_wraddr})
      rxcmd_invalid <= #REGOUT ~cmp_r;
    else if (~rx_stm)
      rxcmd_invalid <= #REGOUT 1'b0;
   
      
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      rxcmd_valid <= #REGOUT 1'b0;
    else if (rxcmd_len + 2 == {7'h00,rxcmdbuf_wraddr})
      rxcmd_valid <= #REGOUT cmp_r;
    else if (~rx_stm)
      rxcmd_valid <= #REGOUT 1'b0;

     
  reg [1:0] rxirq_cnt;
  always @(posedge rxclk or negedge nrst or posedge rxcmd_valid)
    if (~nrst)
      rxirq_cnt <= #REGOUT 2'b11;
    else if (rxcmd_valid)
      rxirq_cnt <= #REGOUT 2'b00;
    else if (~&rxirq_cnt)
      rxirq_cnt <= #REGOUT rxirq_cnt + 1'b1;
   
   assign rxirq = ~&rxirq_cnt;
      


//----------------------------------------------------------
//              Tx logic
  reg  [8:0] txcmdbuf_rdaddr;
  wire [7:0] txcmdbuf_dout;
  wire [15:0] txcmdbuf_dout_16;
  
  reg  [8:0] txcmdlen, txcmdlen_u, txcmdlen_ur;
  reg        txcmdbuf_ok, txcmdbuf_ok_r, txcmdbuf_ok_rr;


  txcmdbuf txcmdbuf_inst(
          .data (txdata),
          .wraddress (txaddr[7:0]),
          .wrclock (txclk),
          .wren (txlatch),
          .rdaddress (txcmdbuf_rdaddr[8:1]),
          .rdclock (uclk),
          .q (txcmdbuf_dout_16)
  );

  assign txcmdbuf_dout = (~txcmdbuf_rdaddr[0]) ? txcmdbuf_dout_16[15:8] : txcmdbuf_dout_16[7:0];

  wire txcmd_over_rst = (txcmdbuf_rdaddr >= txcmdlen);
  reg  txcmd_over_rst_r, txcmd_over_rst_rr;
  
  always @(posedge txclk)
    begin
      txcmd_over_rst_r  <= #REGOUT txcmd_over_rst;
      txcmd_over_rst_rr <= #REGOUT txcmd_over_rst_r;
    end
  
  reg [3:0] txcmd_over_cnt;
  always @(posedge txclk or posedge txcmd_over_rst_rr)
    if (txcmd_over_rst_rr)
      txcmd_over_cnt <= #REGOUT 4'b0000;   
    else if (~&txcmd_over_cnt)
      txcmd_over_cnt <= #REGOUT txcmd_over_cnt + 1'b1;   
      

  wire txcmd_over = ~&txcmd_over_cnt;

             
  always @(posedge txclk or negedge nrst)
    if (~nrst)
    begin
      txcmdlen      <= #REGOUT 9'hFFF;
      txcmdbuf_ok_r <= #REGOUT 1'b0;
    end
    else if (txlatch == 1'b1 && txaddr == 8'hFF)   //**METASTEABILITY
    begin
      txcmdlen      <= #REGOUT txdata[8:0];
      txcmdbuf_ok_r <= #REGOUT 1'b1;
    end
    else if (txcmd_over)
        begin
          txcmdlen      <= #REGOUT 9'hFFF;
          txcmdbuf_ok_r <= #REGOUT 1'b0;
        end
   
   
  always @(posedge uclk or negedge nrst)
    if (~nrst)
    begin
       txcmdlen_u   <= #REGOUT 9'h000;
       txcmdlen_ur  <= #REGOUT 9'h000;
    end
    else
    begin
       txcmdlen_u   <= #REGOUT txcmdlen;
       txcmdlen_ur  <= #REGOUT txcmdlen_u;
    end
      
  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
    begin
       txcmdbuf_ok_rr <= #REGOUT 1'b0;
       txcmdbuf_ok    <= #REGOUT 1'b0;
    end
    else
    begin
       txcmdbuf_ok_rr <= #REGOUT txcmdbuf_ok_r;
       txcmdbuf_ok    <= #REGOUT txcmdbuf_ok_rr;
    end
      
        
   
  wire [8:0]  txusbbuf_din;
  wire [17:0] fifo_out;
  reg         txusbbuf_wren;
  reg         txusbbuf_latch;
  wire        txusbbuf_wrfull, txusbbuf_rdempty;   
      
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      txcmdbuf_rdaddr <= #REGOUT 9'h000;
    else if (txusbbuf_latch && txcmdbuf_rdaddr <= txcmdlen_ur)
      txcmdbuf_rdaddr <= #REGOUT txcmdbuf_rdaddr + 1'b1;
    else if (~txcmdbuf_ok)
      txcmdbuf_rdaddr <= #REGOUT 9'h000;
  
  fifo8_16 usb_dataout_buf_inst(
    .data (txusbbuf_din),
    .wrclk (uclk),
    .wrreq (txusbbuf_wren),
    .wrfull (txusbbuf_wrfull),
    .rdempty (txusbbuf_rdempty),
    .rdclk (uclk),
    .rdreq (txusbbuf_rd),
    .q (fifo_out)
  );
   
  reg [2:0] cnt;  
  always @(posedge uclk or negedge nrst)
    if (~nrst)
    begin
      txusbbuf_latch <= #REGOUT 1'b0;
      cnt <= #REGOUT 3'b111;
    end
    else if (~txcmdbuf_ok)
    begin
      txusbbuf_latch <= #REGOUT 1'b0;
      cnt <= #REGOUT 3'b111;
    end
    else if (txcmdbuf_rdaddr == txcmdlen_ur)
    begin
      txusbbuf_latch <= #REGOUT 1'b0;
      cnt <= #REGOUT 3'b000;
    end
    else if (txcmdbuf_ok && &cnt && ~txusbbuf_wrfull)
      txusbbuf_latch <= #REGOUT 1'b1;
    else if (~&cnt) //if (~txusbbuf_wrfull)
      cnt <= #REGOUT cnt + 1'b1;
      
      
  reg txusbbuf_latch_d, txusbbuf_latch_dd;
  
  always @(posedge uclk)
  begin
    txusbbuf_latch_d  <= #REGOUT txusbbuf_latch;
    txusbbuf_latch_dd <= #REGOUT txusbbuf_latch_d;
  end
  
  wire txusbbuf_latch_dp = ~txusbbuf_latch_d & txusbbuf_latch_dd;
  
  reg latch_dd;
  reg[2:0] latch_dd_cnt;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
                latch_dd_cnt <= #REGOUT 3'b111;
    else if (txusbbuf_latch_dp)
                latch_dd_cnt <= #REGOUT 3'b000;
    else if (~&latch_dd_cnt)
                latch_dd_cnt <= #REGOUT latch_dd_cnt+1'b1;
   
      
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      txusbbuf_wren <= #REGOUT 1'b0;
    else
      txusbbuf_wren <= #REGOUT txusbbuf_latch | (~&latch_dd_cnt);
      
  reg [7:0] txcmd_chksum;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      txcmd_chksum <= #REGOUT 8'h00;
    else if (txusbbuf_wren)
      txcmd_chksum <= #REGOUT txcmd_chksum +  txcmdbuf_dout;
    else
      txcmd_chksum <= #REGOUT 8'h00;
  
  assign txusbbuf_din = (~&latch_dd_cnt) ? 17'h00000 : (txcmdbuf_rdaddr == txcmdlen_ur) ? {1'b1, txcmd_chksum} : {1'b0, txcmdbuf_dout};
  
  assign txbufok     = ~txusbbuf_rdempty;

//  assign txusbbuf_rd = (bus_stm == `BUSST_WR) && txbufok && can_tx;
  reg [2:0] cnt_d;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
    begin
      cnt_d <= 3'h0;
      txusbbuf_rd <= 1'b0;
    end
    else if (txusbbuf_rd)
    begin
          txusbbuf_rd <= 1'b0;
      cnt_d <= 3'h0;
        end
        else if (cnt_d==3'h1)
        begin
          txusbbuf_rd <= (bus_stm == `BUSST_WR) && txbufok && can_tx;
        end
        else if (cnt_d < 3'h1)
          cnt_d <= cnt_d + 1'b1;
  
  
  always @(posedge uclk)
    udatao <= #REGOUT {fifo_out[16:9], fifo_out[7:0]};



  reg upktend_r;
  reg [2:0] end_cnt;
  always @(posedge uclk or negedge nrst)
    if (~nrst)
      end_cnt <= 3'hf;
    else if(txusbbuf_rd && (fifo_out[17] || fifo_out[8]))
      end_cnt <= 3'h0;
    else if (~&end_cnt)
      end_cnt <= end_cnt + 1'b1;

//
//  assign upktend = ~(txusbbuf_rd && (fifo_out[17] || fifo_out[8]));
//  assign upktend = upktend_r;
  assign upktend = (end_cnt==3'b101) | upktend_en;
  
  assign txbsy = txcmdbuf_ok_r;
  
  
endmodule

使用特权

评论回复
地板
jlgcumt| | 2010-8-2 17:32 | 只看该作者
强烈支持LZ,LZ真是太伟大了!

使用特权

评论回复
5
jlgcumt| | 2010-8-2 17:35 | 只看该作者
是没有时序约束的例子,俺们也学习学习!

使用特权

评论回复
6
wangkj| | 2010-8-2 20:06 | 只看该作者
这不就是pudn吗?

使用特权

评论回复
7
sinetech|  楼主 | 2010-8-2 20:17 | 只看该作者
和pudn无法比拟,仅是想把我们已经做过的东西在不违反原则的情况下共享出来。让更多人成长和受益。

使用特权

评论回复
8
钻研的鱼| | 2010-8-4 11:46 | 只看该作者
理念非常好。现在都是市场化经济,有楼主这样的思想,凤毛麟角

使用特权

评论回复
9
yadog| | 2010-8-4 16:35 | 只看该作者
首先sp下lz的共享精神!

看了下头几行程序

说说小感受
说实话,lz的代码风格好像有点儿问题
1。无文件头;
2。input,output随地摆;
3。未使用2001语法思想;
4。开头那几行的ifelse不完备;
5。代码中插入人工延时
。。。

感觉这样给新手会有误导作用,建议lz稍微整理下

随便说说,别介意

使用特权

评论回复
10
sinetech|  楼主 | 2010-8-4 17:54 | 只看该作者
当然要介意:)
      首先,多谢LS的建议。然后稍微的做下说明:头文件没有拷贝进来,是觉得没必要;程序从工程文件里拷出来直接粘贴会有一些格式的问题,如缩进等;程序的规范性有待大家共同完善,每个人的代码风格都不一样,之前我觉得这个代码风格还可以,现在期待更好的代码风格;关于人工延时是程序的需要。
    LS关于发出来的东西要慎重整理的建议也是我之前提出的一点要求,在此也予以大力支持!我这次做的不够好,希望大家能比我做的更好。
    期待大家能给我们提供更优秀的样板DEMO:victory:

使用特权

评论回复
11
lordaron| | 2010-8-4 21:46 | 只看该作者
新人来此学习~感谢LZ无私的共享精神

使用特权

评论回复
12
CpuDragon| | 2010-8-4 22:46 | 只看该作者
初来乍道,先顶一个。

使用特权

评论回复
13
engelbert| | 2010-8-9 00:56 | 只看该作者
支持

使用特权

评论回复
14
wxfxwk1986| | 2010-8-28 21:24 | 只看该作者
大力支持,楼主想法很好,让初学者受益

使用特权

评论回复
15
hangtiancheng| | 2010-9-19 21:24 | 只看该作者
本帖最后由 hangtiancheng 于 2010-9-19 21:25 编辑

希望sinetech作为fpga版第一版主,不要老是回忆学生时代做过的什么例子,也别老从网上摘抄学习方法、学习资料来教育大家,倒是这个号召大家提交自己的工作成果有点意思。
不过你作为一家技术团队负责人,这个商业背景有点强吧?

使用特权

评论回复
16
zhang_2000| | 2010-9-25 20:14 | 只看该作者
这代码结构层次都没有     不及格啊    O(∩_∩)O哈哈~

使用特权

评论回复
17
sinetech|  楼主 | 2010-9-27 08:08 | 只看该作者
希望sinetech作为fpga版第一版主,不要老是回忆学生时代做过的什么例子,也别老从网上摘抄学习方法、学习资料来教育大家,倒是这个号召大家提交自己的工作成果有点意思。
不过你作为一家技术团队负责人,这个商业背 ...
hangtiancheng 发表于 2010-9-19 21:24
我发出来的是我们做过的项目中自己写的code源码,你若能说出这个代码的出处就贴出来。希望你能对自己说的话负责。我的初衷就是想能让大家交流心得,可以不要像教材中那么花哨,哪怕你只会用if else但是能把一个项目很好的完成,那就是你的能力体现。技术这点事只有不懂得人才觉得神秘,在我看来技术上没什么秘密可言,难的在于原理和架构,是思想,而不是写代码。

使用特权

评论回复
18
sxhhhjicbb| | 2010-10-20 20:48 | 只看该作者
# 字的延时,不能综合吧。

使用特权

评论回复
19
zxcvb110| | 2010-10-21 22:16 | 只看该作者
lai过!!!!!

使用特权

评论回复
20
zhaozhutadie| | 2010-10-28 19:56 | 只看该作者
太可疑了,光看见有留言的人名,没看到留言,都被第一版主给河^^蟹了!
这么多人,长期的**做着毫不利人,也耗自己精力的反事情,第一版主阁下该反省了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一路沿着梦想前行.... 以技术为依托 以能力做保障 以责任促品质 以理念谋发展

21

主题

431

帖子

1

粉丝