集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2722|回复: 3

编程问题,帧头搜索定位,容错的程序,高手指点一下

[复制链接]
ddr 发表于 2010-4-12 10:35:56 | 显示全部楼层 |阅读模式
module test11(clk,din,reset,dout);
input clk,reset;        //时钟/复位
input [7:0]din;         //输入数据
output dout;
reg [3:0]locate_47;     //锁定47的位置
reg[2:0]num;            //搜索阶段记录连续47的个数即搜索的帧数<=7
reg [3:0]count;         //计数
reg lock,p;               //开始锁定阶段的控制位
reg[7:0]din_r,din_r_1;  //数据寄存
reg dout_r;wire dout_r_1;
reg[2:0]k;
//-------开始复位---------
always@(posedge clk)
begin
  if(reset)
    begin
    count=0;locate_47=0;
    num=0;lock=0;k=3;p=1'b0;
    dout_r=0;
    end end
//-------计数和数据输入-----------
always@(posedge clk)
begin
  din_r=din;         
  count=count+1'b1;
  if(count==4'b1010)
    count=4'b0000;
end
//--------------------------------------
always@(posedge clk)
begin
   if(count==locate_47)
     din_r_1=din_r;   //
   if(din_r_1==47)   //
        num=num+1'b1;
   else
      begin
      if(k==3)
      locate_47=locate_47+1'b1;
      end         
   if(locate_47==4'd10)  
      locate_47=4'b0000;
end
//-------------------------------------
always@(posedge clk)
begin
  if(num==3'b011)
    num=3'b000;
    lock=1'b1;
end
//----------------------------------
always@(posedge clk)
begin
  if(lock)
    begin
  p=~p;
   if(din_r_1==8'h47)
       dout_r=~dout_r;
   else
      begin
        k=k+3'b001;
        if(k==3'b010)
          begin
    k=3'b011;
          lock=0;
       end
      end
  end
end
assign dout=dout_r;
endmodule

加入assign dout=dout_r;时就出现下面错误,,没加时只出现警告。

是哪里语法出现错误呢,,请高手指点。。
程序的功能是搜索和容错功能,每个时钟进来一个字(8位)数据,十个字为一帧,要搜索出帧的头个字(即帧头),每个帧头都是47,但2个帧头中间也可能出现47,当连续检测到3个在帧中同样位置的都为47,就确定其为帧头,这时就有一个out输出高,定位后每到帧的这个位置out就为高,但如果连续出现2个不为47,又要重新进入搜索程序。

错误:
Info: *******************************************************************
Info: Running Quartus II Analysis & Synthesis
Info: Version 9.1 Build 222 10/21/2009 SJ Web Edition
Info: Processing started: Fri Apr 09 00:52:25 2010
Info: Command: quartus_map --read_settings_files=on --write_settings_files=off test11 -c test11
Info: Found 1 design units, including 1 entities, in source file test11.v
Info: Found entity 1: test11
Info: Elaborating entity "test11" for the top level hierarchy
Error (10028): Can't resolve multiple constant drivers for net "locate_47[3]" at test11.v(30)
Error (10029): Constant driver at test11.v(13)
Error (10028): Can't resolve multiple constant drivers for net "locate_47[2]" at test11.v(30)
Error (10028): Can't resolve multiple constant drivers for net "locate_47[1]" at test11.v(30)
Error (10028): Can't resolve multiple constant drivers for net "locate_47[0]" at test11.v(30)
Error (10028): Can't resolve multiple constant drivers for net "count[3]" at test11.v(22)
Error (10028): Can't resolve multiple constant drivers for net "count[2]" at test11.v(22)
Error (10028): Can't resolve multiple constant drivers for net "count[1]" at test11.v(22)
Error (10028): Can't resolve multiple constant drivers for net "count[0]" at test11.v(22)
Error (10028): Can't resolve multiple constant drivers for net "lock" at test11.v(45)
Error (10028): Can't resolve multiple constant drivers for net "dout_r" at test11.v(52)
Error (10028): Can't resolve multiple constant drivers for net "k[2]" at test11.v(52)
Error (10028): Can't resolve multiple constant drivers for net "k[1]" at test11.v(52)
Error (10028): Can't resolve multiple constant drivers for net "k[0]" at test11.v(52)
Error: Can't elaborate top-level user hierarchy
Error: Quartus II Analysis & Synthesis was unsuccessful. 15 errors, 0 warnings
Error: Peak virtual memory: 164 megabytes
Error: Processing ended: Fri Apr 09 00:52:27 2010
Error: Elapsed time: 00:00:02
Error: Total CPU time (on all processors): 00:00:01
 楼主| ddr 发表于 2010-4-12 10:36:13 | 显示全部楼层
LZ是UESTC的吧
luckymiaojw 发表于 2011-5-9 22:52:06 | 显示全部楼层
一个变量是不可以在两个always模块中被赋值的,就比如说locate_47在开始复位那里被赋值一次在,然后在倒数第三个always模块里又被赋值一次,所以不能通过。还有就是你写的程序,时序逻辑怎么都是用的非阻塞赋值啊,一般时序逻辑都用阻塞赋值,不过我也不知道你的用途,只是说这里得注意下。
至芯兴洪 发表于 2011-5-9 23:13:30 | 显示全部楼层
建议书写规范:时序逻辑用非阻塞,组合逻辑该用阻塞,阻塞非阻塞无用也会出现错误的
1:你的输出信号dout用于assign的话应该定义成wir型:
2:你的复位信号在每个沿促发always块中都应该使用上;
3:注意下你的if语句的使用 你代码中会出现不少的锁存器
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-18 07:12 , Processed in 0.120384 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表