在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7235|回复: 2

[原创] 发一个读取验证xilinx spartan 3a系列DNA的原码,加密用!给大家参考

[复制链接]
发表于 2012-1-9 15:02:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 zhbbhz 于 2012-1-9 15:04 编辑

/*
2011/11/18
40M Fosc
this time we will create one hz pulse
*/
module one_hz_dna(
                   clk,
                   en,
               
                   fout,
               fout1,
               fout2,
       data8
                  );
///////////////////////////////////////dna define/////////////////////////////////////////
  input en;
  
  output [7:0] data8;  
  /*         FSM define                      */
  parameter  s0 = 8'b00000001;
  parameter  s1 = 8'b00000010;
  parameter  s2 = 8'b00000100;
  parameter  s3 = 8'b00001000;
  parameter  s4 = 8'b00010000;
  parameter  s5 = 8'b00100000;
  parameter  s6 = 8'b01000000;
  parameter  s7 = 8'b10000000;

  //parameter DNA_LEN = 56;
  //parameter DNA = 56'b01010100_00111011_00101110_11011001_01111001_11010100_00110010;

  parameter DNA_LEN = 60;
  parameter DNA = 56'b0100_00111011_00101110_11011001_01111001_11010100_00110010_1111;

  reg READ;
  reg SHIFT;
  reg DCLK;
  wire DOUT;
  wire DIN;
  reg [7:0]  state, next;
  reg [5:0]  shift_cnt;
  reg [55:0]  dna_reg;
///////////////////////////////////////one hz define//////////////////////////////////////   
  input clk;
  
  output  fout;
  output  fout1,fout2;
  reg[25:0]  t_cnt;
  reg  fout;
  wire fout1,fout2;
  
  parameter FOSC = 40000000;
  //parameter FOSC = 4000;
  parameter CNT_LEN = FOSC - 1;
/////////////////////////////////////////////////////////////////////////////////////////

//  DNA_PORT   : In order to incorporate this function into the design,
//   Verilog   : the following instance declaration needs to be placed
//  instance   : in the body of the design code.  The instance name
// declaration : (DNA_PORT_inst) and/or the port declarations within the
//    code     : parenthesis may be changed to properly reference and
//             : connect this function to the design.  All inputs
//             : and outputs must be connected.
//  <-----Cut code below this line---->
   // DNA_PORT: Access to the device-specific DNA value
   //           Spartan-3A, Virtex-6, Spartan-6
   // Xilinx HDL Language Template, version 12.4
   DNA_PORT #(
      .SIM_DNA_VALUE(57'h000000000000000) // Specifies the unique DNA value
                                          //   for simulation test
   ) DNA_PORT_inst (
   
      .DOUT(DOUT),  // 1-bit DNA output data
      .CLK(DCLK),    // 1-bit clock input
      .DIN(DIN),    // 1-bit user data input pin
      .READ(READ),  // 1-bit input, active high load DNA, active low READ
      .SHIFT(SHIFT) // 1-bit input, active high SHIFT enable
   );
   // End of DNA_PORT_inst instantiation
   

////////////////////////////////////////////////////////////////
  always @(posedge clk)
    begin
      if(t_cnt < CNT_LEN)
        t_cnt <= t_cnt + 1;
      else
        begin
          t_cnt <= 0;
          fout <= ~fout;
        end
    end
  
  //assign fout1 = 1;
  //assign fout2 = 0;
//////////////////////////////////////////////////////////////////////////////
  always @(posedge clk or negedge en)
    begin
      if(!en)
        state <= s0;
      else
      state <= next;
    end
  
  always @(state or en or shift_cnt)
    begin
      case(state)
        s0:
          begin
            if(!en)
              next = s0;
            else
              next = s1;
          end
        s1:
          begin
              next = s2;
          end
        s2:
          begin
              next = s3;
          end
        s3:
          begin
              next = s4;
          end
        s4:
          begin
              next = s5;
          end
        s5:
          begin
              next = s6;
          end
        s6:
          begin
            if(shift_cnt < DNA_LEN)
              next = s5;
            else
              next = s7;
          end
        s7:
          begin
            next = s7;
          end
        default:  next = s0;
      endcase
    end

  always @(posedge clk)
    begin
      case(next)
        s0:
          begin
            READ <= 0;
            SHIFT <= 0;
            DCLK <= 0;
            shift_cnt <= 0;
          end
        s1:
          begin
            READ <= 1;
          end
        s2:
          begin
            DCLK <= 1;
          end
        s3:
          begin
            DCLK <= 0;
            READ <= 0;
          end
        s4:
          begin
            SHIFT <= 1;
          end
        s5:
          begin
            DCLK <= 1;
          end
        s6:
          begin
            shift_cnt <= shift_cnt + 1;
            DCLK <= 0;
// we should send the dout to dna_reg here!
            dna_reg <= dna_reg << 1;
            dna_reg[0] <= DOUT;
          end
        s7:
          begin
            READ <= 0;
            SHIFT <= 0;
            DCLK <= 0;
            shift_cnt <= 0;
          end
        default:
          begin
            READ <= 0;
            SHIFT <= 0;
            DCLK <= 0;
            shift_cnt <= 0;
          end
      endcase
    end
  assign DIN = 1;
  assign fout1 = (dna_reg == DNA)? 0:fout;
  assign fout2 = fout;
  
  assign data8 = dna_reg[7:0];  

endmodule
发表于 2012-1-9 21:13:12 | 显示全部楼层
不懂,怎么做到加密的,楼主能解释下吗?谢谢
发表于 2013-8-15 17:03:53 | 显示全部楼层
楼主能否介绍一下代码的实现过程啊!最近在看着方面的内容!请不吝赐教!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 21:50 , Processed in 0.021303 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表