如何清除微处理器设计的错误

时间:2014-03-06 14:36:37

标签: verilog

设计一个微处理器。它的工作原理如下

1.在写操作期间(中心,(wr,msel,mclk,男性) - >高), adr 上的任何内容都应放在 adbus 上(在内部多路复用)以查找存储器的地址位置。之后, din 上的所有数据都应该再次放入adbus中以便写入内存。

2.在读取操作(现在 wr 为低以指示读取操作)期间, addr 内容应再次置于 adbus 中。所有上述内容的移动都应该在 poskge clk 进行。但只有在阅读操作中,无论adbus中存在的数据是什么,都应该在 dout 驱动 dout

其他详细信息

一个。 cen 当低时只访问读写操作

湾当高adbus携带写入数据时 mwr

℃。 男性记忆添加。锁存启用,当高运载时添加。资讯

d。 mrd 高时,adbus承载读取数据并在clk下降沿后由内存驱动

msel 芯片启用(应该很高)

F。 mclk 追踪内存。这是一个棘手的部分 - >读取数据在 mclk

的下降沿后可用于 adbus

mwr mrd 男性中只有一个在时钟周期内可能为高电平,并且在锁存的add处发生读/写操作。在记忆中(不知道它究竟意味着什么!!!)

module mem_controller(addr,din,cen,wr,clk,dout,mclk,male,msel,mwr,mrd,adbus);
input  [7:0] addr;
input  [7:0] din;
input cen,wr,clk;
output reg [7:0] dout;
output mclk,male,msel,mwr,mrd;
inout [7:0] adbus;
wire [7:0] adbus;

initial
    clk = 1'b1;

//  assign addr  = 8'b01010101;
//  assign din   = 8'b01111111;
//  assign dout  = 8'b10000000;
//  assign adbus = 8'b10101111;

assign male = 1'b0;
assign wr   = 1'b0;
assign msel = 1'b0;
assign mwr  = 1'b0;
assign mwd  = 1'b0;
assign cen  = 1'b1;

always
   #10 clk = ~clk;
initial 
begin
   #20 cen  = 1'b0;
   #10 wr = 1'b1;
   #10 msel = 1'b1;
   #10 mclk = 1'b1;
   #10 male = 1'b1;
   #20 male = 1'b0;
   #20 mwr  = 1'b1;
   #20 mwr = 1'b0;
   #20 wr = 1'b0;
   #20 male = 1'b1;
   #20 male = 1'b0;
   #20 mrd  = 1'b1;
   #20 mrd  = 1'b0;
   #20 msel = 1'b1;
   #0 mclk = 1'b0;

   #20 cen  = 1'b1;

   #20 $finish;
end

always @(posedge clk) 
  begin
   if      ((!cen) &&   wr  && msel && mclk && male) 
adbus =addr;

   else if ((!cen) &&   wr  && msel && mclk && mwr)   
 adbus = din;

   else if ((!cen) && (!wr) && msel && mclk && male) 
adbus = addr;
end

always @(negedge clk) 
begin
   if((!cen) && (!wr) && msel && mclk && mrd)
      dout = adbus;
end 

endmodule

显示的错误是

  

对矢量线'adbus'的引用不是合法的注册或变量左值

  

阻止作业的非法左侧

我也无法将其作为reg(它会显示以下错误)

  

“非法重新声明'adbus'为reg”

请帮忙......

1 个答案:

答案 0 :(得分:2)

  • initial blocks需要转移到测试平台。
  • 您无法使用assign语句连接输出,并直接更改初始块中的值。
  • Synchrounus逻辑应使用非阻塞(<=
  • inout是一个三态,需要指定为:
    • assign adbus = output_enable ? adbus_out : 8'bz;
  • clk驱动程序(always #10 clk = ~clk;)需要在测试平台上。