打印

求解

[复制链接]
2838|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TE, tmp, ST, RS, TI
本帖最后由 chenxl1990 于 2013-4-12 10:29 编辑

利用流水线设计,对输入的16位数据进行检测:检测两个1中间0的最大的个数,在设计过程过对中间得控制信号老是提示连接到多驱动“Multi-source in Unit <counter_1> on signal <incr_k>; this signal is connected to multiple drivers.” 其中
数据通路包括一个位计数器(k)、一个存储寄存器(tmp)、一个间隙寄存器(Gap)。
控制器产生的控制信号包括: flush_tmp:清空tmp寄存器,incr_tmp:增加tmp寄存器,store_tmp:用tmp加载Gap,incr_k:增加k寄存器
     `timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    14:39:51 04/09/2013
// Design Name:
// Module Name:    counter_1
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module counter_1(clk,rst,data,Gap);
input clk,rst;
input [15:0] data;
output reg [3:0] Gap;
reg [3:0] temp;
reg [3:0] k;
reg Bit;
reg incr_temp,incr_k,flush_temp,store_temp;
reg [1:0] state,next_state;
parameter s_0=2'b00,s_1=2'b01,s_2=2'b10,s_done=2'b11;
always@(posedge clk) begin
  if(rst)begin
  incr_temp<=0;incr_k<=0;flush_temp<=0;store_temp<=0;
  state<=s_0;
  end
  else begin state<=next_state;end
  end
always@(state or Bit or k) begin
  Bit<=data[k];
  next_state<=state;
  incr_temp<=0;incr_k<=0;flush_temp<=0;store_temp<=0;
  case (state)
  s_0:if(k==15)begin next_state<=s_done;end
      else if(Bit==0) begin incr_k<=1;next_state<=s_0;end
        else begin incr_k<=1;next_state<=s_1;end
  s_1:if(k==15)begin next_state<=s_done;end
       else if(Bit==1) begin incr_k<=1;next_state<=s_1;end
        else begin incr_k<=1;incr_temp<=1;end
  s_2:if(k==15)begin
       if(Bit==1) begin
    if(temp>Gap) begin next_state<=s_done;store_temp<=1;end
     else begin
        next_state<=s_done;end
    end
    else if(Bit==0) begin
         next_state<=s_2;end
         else if(temp>Gap) begin
       incr_k<=1;
       flush_temp<=0;
       next_state<=s_1;store_temp<=1;
      end
           else begin
       incr_k<=1;
       flush_temp<=0;
       next_state<=s_1;end
   end
s_done:begin store_temp<=1;next_state<=s_done;end
default:begin next_state<=s_0;end
endcase
end
always@(posedge clk)begin
   if(rst) begin
   k<=0;Gap<=0;temp<=0;end
   else if(incr_k) begin
   k<=k+1;end
   else if(incr_temp) begin
   temp<=temp+1;end
   else if(store_temp) begin
   Gap<=temp;end
   else if(flush_temp) begin
   temp<=0;end
    else temp<=temp;
  end
endmodule

2.jpg (28.15 KB )

2.jpg

相关帖子

沙发
GoldSunMonkey| | 2013-4-11 16:52 | 只看该作者
看不出来啊

使用特权

评论回复
板凳
chenxl1990|  楼主 | 2013-4-14 20:28 | 只看该作者

使用特权

评论回复
地板
qin552011373| | 2013-4-14 21:13 | 只看该作者
不懂啊

使用特权

评论回复
5
GoldSunMonkey| | 2013-4-14 21:16 | 只看该作者
分数都给系统了

使用特权

评论回复
6
梅花望青竹| | 2013-4-14 23:40 | 只看该作者
parameter s_0=2'b00,s_1=2'b01,s_2=2'b10,s_done=2'b11;
always@(posedge clk) begin
  if(rst)begin
  incr_temp<=0;incr_k<=0;flush_temp<=0;store_temp<=0;
  state<=s_0;
  end
  else begin state<=next_state;end
  end
always@(state or Bit or k) begin
  Bit<=data[k];
  next_state<=state;
  incr_temp<=0;incr_k<=0;flush_temp<=0;store_temp<=0;
  case (state)

使用特权

评论回复
7
梅花望青竹| | 2013-4-14 23:40 | 只看该作者
红色的

使用特权

评论回复
8
chenxl1990|  楼主 | 2013-4-15 10:48 | 只看该作者
梅花望青竹 发表于 2013-4-14 23:40
红色的

不懂。。。

使用特权

评论回复
9
梅花望青竹| | 2013-4-15 17:55 | 只看该作者
你把这两个写在一个always@里面

使用特权

评论回复
10
GoldSunMonkey| | 2013-4-16 23:55 | 只看该作者
贴代码就看出来了,画图看不出来。

使用特权

评论回复
11
GoldSunMonkey| | 2013-4-16 23:55 | 只看该作者
贴代码就看出来了,画图看不出来。

使用特权

评论回复
12
GoldSunMonkey| | 2013-4-16 23:55 | 只看该作者
小梅说的对

使用特权

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

本版积分规则

1

主题

10

帖子

0

粉丝