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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3528|回复: 5

DC综合时报错 Clock clr used as data

[复制链接]
发表于 2014-6-22 21:02:47 | 显示全部楼层 |阅读模式

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

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

x

题目:设计一个简易异步接收机,用BCD05工艺库实现(从代码到版图)。

1M==1us








1.接收机功能

发送机等价为一个11位的移位寄存器,发送数据时以固定的125KHz的频率移位。发送数据格式见图1。发送机在空闲状态下(不发送数据时)txd端口(与接收机的rxd相连)为1,由于发送数据的第一位总是0,故接收机可检测到一个“负跳变”以实现发送与接收的同步。接下来的8位是要求接收的数据,接收机应能够正确接收该数据,使接收端的b[7:0]等于发送端的b[7:0]。发送端的第10位为奇偶校验位ee等于b0^b1^b2^b3^b4^b5^b6^b7,接收机可根据接收到的b[7:0]e的关系判断是否发生了数据传输错误。发送数据的最后一位为固定的1,确保空闲状态下txd端口为1

2.接收机端口定义

1rxd:   接收数据端口

2rst_n: 同步复位端,低有效。

3rcv_en:接收使能信号,高有效。

4b[7:0]: 接收数据。

5rcv_ok: 接收正确的标志。每次接收开始时清0,接收到校验位e后,根据运算决定输出,1表示正确,0表示错误。

6rcv_st:接收状态。1表示正在接收过程中,b[7:0]不可用,0表示已完成接收,b[7:0]可用。

3.设计环境

1)所有输出端负载为0.1PF

2)所有输入信号内阻为1k

3)所有输入信号上升、下降时间不超过2ns

4rcv_en端输入延迟为时钟周期的20%

5)输出延迟为时钟周期的30%

4.答题要求

1)设计代码

2)验证代码,包括正确的和有接收错误的。

4)状态机和数据通道图。

5)仿真结果

6)逻辑综合脚本

7)版图

尝试了修改latch 块,但改完功能受影响;
求助各位大神,怎么解决而影响功能呀

我写的Verilog代码如下:



//2014-06-22

module tg(b,a,y);

input a;

input b;

output y;

reg y;


always@(a or b)

    if(a==1'b1)

      y=b;

    else

      y=1'b1;

endmodule

//----------------------------------------------------------------------------------------------------------------

module det(din,clk,rst_n,en,neg);

input din;

input clk;

input rst_n;

input en;

output neg;

reg q1;

reg q2;

reg neg;

always @(posedge clk)

begin

   q1<=din;

   q2<=q1 ;  

if(rst_n==1'b0 )

   neg<=0;

else if(en==1'b0 && din==1'b0)

   neg<=q1^q2;

else

  neg<=0;

end


endmodule

//---------------------------------------------------------------------------------------------------------

module latch(clk,clr,y);

input clk;

input clr;

output y;

//--------------------

reg y;

reg x;

//--------------------

always@(negedge clr)

    if(clr==1'b0)

      y<=1'b0;

//------------------------

always@(clk)

begin

    x=1'b1;

    if(clk==1'b1)

      y=x;

end

endmodule


//-----------------------------------------------------------------------------------------------------------

module dff(data,clk,clr,q);

input data;

input clk;

input clr;

output q;


reg q;


always@(posedge clk or posedge clr )

    if(clr==1'b1)

      q<=1'b0;

    else

      q<=data;  

endmodule

//-------------------------------------------------------------------------------------------------------

module cnt16(clk,clr,ena,co);

input clk;

input clr;

input ena;

output co;


reg co;

reg [3:0]q;


always@(posedge clk or negedge clr)

begin

    if(clr==1'b0)

    q<=4'h0;

    else if(ena==1'b1)

    if (q==4'b1111)

      q<=4'b0000;

    else q<=q+1'b1;

end


always@(q)

begin

    if(q==4'b1111)

    co=4'h1;

    else

    co=4'h0;

end

endmodule

//--------------------------------------------------------------------------------------------------------

module cnt11(clk,clr,ena,q,co);

input clk;

input clr;

input ena;

output [3:0]q;

output co;


reg [3:0]q;

reg co;


always@(posedge clk or negedge clr)

begin

    if(clr==1'b0)

    q<=4'h0;

    else if(ena==1'b1)

    if (q==4'b1010)

      q<=4'b0000;

    else q<=q+1'b1;

end


always@(q)

begin

    if(q==4'b1010)

    co=4'h1;

    else

    co=4'h0;

end

endmodule

//-----------------------------------------------------------------------------------------------------------

module receiver_fsm(clk,rst_n,x1,neg,rcv_st,q1,q2);

input clk;

input rst_n;

input [3:0] x1;

input neg;

output rcv_st;

output q1;

output q2;

//---------------

reg rcv_st;

reg q1;

reg q2;

reg [2:0]cs;

reg [2:0]ns;

//---------------------

parameter idle =3'b000;

parameter st1  =3'b001;

parameter st2  =3'b010;

parameter st3  =3'b011;

parameter st4  =3'b100;

parameter st5  =3'b101;

//---------------------

always@(posedge clk)

    if(rst_n==1'b0)

      cs <=idle;

    else

      cs <=ns;

//---------------------------------------

always@(cs or x1 or neg)

    case(cs)

      idle:

        begin

        {rcv_st,q1,q2}=3'b000;

          if(x1==4'b0000)

            ns=st1;

        end

      st1:

        begin

         {rcv_st,q1,q2}=3'b001;

         if(x1==4'b0000)

            ns=st1;

         else if(4'b0001<=x1<=4'b0111)

            ns=st2;

        end

      st2:

        begin

         {rcv_st,q1,q2}=3'b101;

          if(x1==4'b1000)

            ns=st3;

        end

      st3:

        begin

         {rcv_st,q1,q2}=3'b100;

          if(x1==4'b1001)

            ns=st4;

        end

      st4:

        begin

         {rcv_st,q1,q2}=3'b110;

          if(x1==4'b1010)

            ns=st5;

        end

      st5:

        begin

         {rcv_st,q1,q2}=3'b010;

          if(neg==1'b1)

            ns=idle;

        end   

    endcase


endmodule


//-----------------------------------------------------------------------------------------------

module s2p (sdata,clk,rst_n,en1,en2,in1,out,pdata);

    output [7:0] pdata;

    output out;

    input sdata,clk,rst_n,en1;

    input en2,in1;

    reg out;

    reg [7:0] pdata;

    reg [7:0] p_reg;  

//---------------------------------------

    always @(posedge clk or negedge rst_n)         

        if (rst_n==1'b0)

          begin

           pdata <=8'h00;

          end

          else if(en1==1)

            begin

               pdata[7:0]<=8'hzz;

               p_reg[7:1]<=p_reg [6:0];

               p_reg[0]<=sdata;

            end

          else if(en1==1'b0)

            begin

              pdata<=p_reg;

           end      

//----------------------------------------------

always@(en2 or in1 or p_reg)

    if(en2==1'b0)

      out=1'b0;

      

    else

      out=in1^~yh(p_reg);

      

function  yh;

    input[7:0] a;

    integer i;

    begin

        yh=a[0];

        for (i=1;i<8;i=i+1)

          begin

            yh=yh^a;

          end

    end

endfunction

//--------------------------------------

endmodule

//------------------------------------------------------------------------------------------------------

module receiver2(rxd,rst_n,rcv_en,clk,b8bit,rcv_ok,rcv_st);

input rxd;

input rst_n;

input rcv_en;

input clk;

output [7:0] b8bit;

output rcv_ok;

output rcv_st;


//---------------------------

wire s0,s1,s2,s3,s4,s5,s7,s8,s10;

wire [3:0]s6;

reg [2:0]cs,ns;

//-----------------------------

parameter idle=3'b000;

parameter st1  =3'b001;

parameter st2  =3'b010;

parameter st3  =3'b011;

parameter st4  =3'b100;

//----------------------------

tg u1(.b(rcv_st),.a(rcv_en),.y(s0));

det u2(.din(rxd),.clk(clk),.rst_n(rst_n),.en(s0),.neg(s1));

latch u3(.clk(s1),.clr(s2),.y(s3));

latch u3_1(.clk(s10),.clr(s1),.y(rcv_ok));

dff u4(.data(rxd),.clk(s4),.clr(s1),.q(s5));

cnt16 u5(.clk(clk),.clr(rst_n),.ena(s3),.co(s4));

cnt11 u6(.clk(s4),.clr(rst_n),.ena(s3),.q(s6),.co(s2));

receiver_fsm u7(.clk(clk),.rst_n(rst_n),.x1(s6),.neg(s1),.rcv_st(rcv_st),.q1(s8),.q2(s7));

s2p u9(.sdata(rxd),.clk(s4),.rst_n(rst_n),.en1(s7),.en2(s8),.in1(s5),.out(s10),.pdata(b8bit));

//---------------------------------------------------------------------------------------------------------

endmodule



测试代码如下

module receiver2_tb();reg rxd;reg rst_n;reg rcv_en;reg clk;wire [7:0] b8bit;wire rcv_ok;wire rcv_st;//-----------------------------receiver2 u0(.rxd(rxd),.rst_n(rst_n),.rcv_en(rcv_en),.clk(clk),.b8bit(b8bit),.rcv_ok(rcv_ok),.rcv_st(rcv_st));//-----------------------task half_pulse;inout clock;    #2.5clock = ~ clock;endtask//----------------------------------------------------------------------------task pulse;input[31:0] num;integer i;    for(i=0;i<num;i=i+1)    begin        half_pulse(clk);        half_pulse(clk);    end     endtask//-------------------------------initial beginrst_n=1'b0;rcv_en=1'b1;clk=1'b0;rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;rst_n=1'b1;#95rxd=1'b0;//begin bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b0;//e bit#95rxd=1'b1;//end bit#95 rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;//12 bite 1#95rxd=1'b0;//begin bit#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;//e bit#95rxd=1'b1;//end bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;//12 bite 1#95rxd=1'b0;//begin bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b0;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;//e bit#95rxd=1'b1;//end bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;//12 bite 1#95rxd=1'b0;//begin bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;//e bit#95rxd=1'b1;//end bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;//12 bite 1#95rxd=1'b0;//begin bit#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b0;#95rxd=1'b0;#95rxd=1'b1;#95rxd=1'b1;#95rxd=1'b1;//e bit#95rxd=1'b1;//end bitend//--------------------initial pulse(50000000);//-----------------------endmodule

用DC编译时报错如下图



脚本文件如下

#------------------------------------------------------------------------------# File   : A TCL format DC script file # Author : xinxn # date   : 2010-08-04    #------------------------------------------------------------------------------set TECH_LIB_PATH   "/iclibs/CSMCBCD05/synopsys"set SYMBOL_LIB_PATH "/iclibs/CSMCBCD05/icons"set CORE_LIB        "IC05CScore_50_typbcdv10.db"set IO_LIB          "IC05CSpad_50_typbcdv10.db"#------------------------------------------------------------------------------set search_path [concat $TECH_LIB_PATH $search_path]set search_path [concat $SYMBOL_LIB_PATH $search_path]echo $search_path#------------------------------------------------------------------------------set target_library {IC05CScore_50_typbcdv10.db}set link_library {* IC05CScore_50_typbcdv10.db IC05CSpad_50_typbcdv10.db}set symbol_library {IC05CScore.sdb}#------------------------------------------------------------------------------# add DesignWare Libs to link library#------------------------------------------------------------------------------set SYN_LIB {dw_foundation.sldb}lappend link_library $SYN_LIB#------------------------------------------------------------------------------#------------------------------------------------------------------------------set WORK_DIR /home/socusr/dcset THIS_DESIGN receiver2#------------------------------------------------------------------------------# reports path and file#------------------------------------------------------------------------------set SETUP_RPT_FILE $WORK_DIR/report/setup_time.rptset HOLD_RPT_FILE  $WORK_DIR/report/hold_time.rptset AREA_RPT_FILE  $WORK_DIR/report/area.rptset CELL_RPT_FILE  $WORK_DIR/report/cell.rptset POWER_RPT_FILE $WORK_DIR/report/power.rptset VIOL_FILE      $WORK_DIR/report/voilation.rpt#----------------------------------------------------------------------------------set NETLIST_FILE   $WORK_DIR/netlist/receiver2_gate.vset SDC_FILE       $WORK_DIR/sdc/receiver2.sdc#----------------------------------------------------------------------------------set CLK_PER 5set IN_DLY [expr $CLK_PER * 0.2]set OUT_DLY [expr $CLK_PER * 0.3]set MAX_TRANSITION 0.1#----------------------------------------------------------------------------------read_verilog $WORK_DIR/code/receiver2.vcurrent_design $THIS_DESIGNlinkcheck_design#----------------------------------------------------------------------------------set ALL_EX_CLK [remove_from_collection [all_inputs] [get_ports clk]]#----------------------------------------------------------------------------------# design rules constraints#----------------------------------------------------------------------------------# set driving ability of input ports and load of output ports.#----------------------------------------------------------------------------------set_drive 1.0 $ALL_EX_CLKset_drive 0 [get_ports clk]set_load  0.1 [all_outputs]#----------------------------------------------------------------------------------set auto_wire_load_selection trueset_max_transition $MAX_TRANSITION $THIS_DESIGNset_max_fanout 6 $ALL_EX_CLKset_max_fanout 2 [get_ports rst_n] #-----------------------------------------------------------------------------------# Timing constraints#-----------------------------------------------------------------------------------create_clock -p $CLK_PER -name CLK [get_ports clk]set_clock_latency 1.0 [get_clocks CLK]set_clock_uncertainty -setup 0.1 CLKset_clock_uncertainty -hold 0.1 CLKset_input_delay -max $IN_DLY -clock CLK $ALL_EX_CLK set_input_delay -min 0.5 -clock CLK $ALL_EX_CLKset_output_delay $OUT_DLY [all_outputs]#-----------------------------------------------------------------------------------report_port #-----------------------------------------------------------------------------------set_dont_touch_network [get_clocks CLK]uniquifyset_max_area 0compile -map_effort high#-----------------------------------------------------------------------------------report_constraint -all_violators > $VIOL_FILE#-----------------------------------------------------------------------------------report_timing > $SETUP_RPT_FILEreport_timing -delay min > $HOLD_RPT_FILE#-----------------------------------------------------------------------------------report_cell  >  $CELL_RPT_FILEreport_area  >  $AREA_RPT_FILEreport_power >  $POWER_RPT_FILE#-----------------------------------------------------------------------------------#-----------------------------------------------------------------------------------write -format verilog -hier -o $NETLIST_FILEwrite_sdc -nosplit $SDC_FILE#quit

尝试了修改latch 块,但改完功能受影响;


求助各位大神,怎么解决而影响功能呀

2.PNG
发表于 2014-6-24 09:24:50 | 显示全部楼层
此帖仅作者可见
 楼主| 发表于 2014-6-24 15:30:04 | 显示全部楼层
此帖仅作者可见
 楼主| 发表于 2014-7-9 13:56:24 | 显示全部楼层
此帖仅作者可见
发表于 2014-8-17 04:23:23 | 显示全部楼层
此帖仅作者可见
发表于 2016-9-28 22:58:22 | 显示全部楼层
此帖仅作者可见
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-25 21:50 , Processed in 0.024768 second(s), 10 queries , Gzip On, Redis On.

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