求助:verilog中调用其他module的语法问题

delacrxoix_xu 2011-05-26 10:23:41
我想在 registers 模块中, 调用 register 模块,组合出 60个寄存器, 这60个寄存器都是 register的实例。
但是其中有些 寄存器的 某些bit是 只读的,是由 外部信号控制的。
例如00H寄存器中,第四个bit代表 全双工,由外部信号控制,

此时 读写寄存器 就要 空出一个 bit来。

这个是调用。
//Net Control Register . 00H
wire temp1;
mac_register NCR_1
(
.DataIn (DataIn),
.DataOut ({NCR_OUT[7:4],temp1,NCR_OUT[2:0]}),
//.DataOut (NCR_OUT),
.Write (Write),
.Clk (Clk),
.Reset (Reset),
.SyncReset (1'b0)
);
assign NCR_OUT[3] = FullD_In;


我目前的办法是,分而治之。把NCR_OUT的不受控制的那个bit空出来。
但是({NCR_OUT[7:4], ,NCR_OUT[2:0]}),但我发现只是空出来,不管用。
必须用一个 占位 连线 temp1 占据那一空位才行

请问各位大侠有什么好办法么?







这是registers 的 代码


module mac_registers( DataIn, Address, Rw, Cs, Clk, Reset, DataOut,
FullD_In, //test,test2,test3,dataInTest
);
parameter Tp = 1;

input [7:0] DataIn;
input [7:0] Address;
input Rw;
input Cs;
input Clk;
input Reset;

output [7:0] DataOut;
reg [7:0] DataOut;

input FullD_In;

wire Write = Cs & Rw;
wire Read = Cs & ~Rw;
wire NCR_SEL = Write && (Address == 8'h0);


wire [7:0] NCR_OUT;


//Net Control Register . 00H
wire temp1;
mac_register NCR_1
(
.DataIn (DataIn),
.DataOut ({NCR_OUT[7:4],temp1,NCR_OUT[2:0]}),
//.DataOut (NCR_OUT),
.Write (Write),
.Clk (Clk),
.Reset (Reset),
.SyncReset (1'b0)
);
assign NCR_OUT[3] = FullD_In;


// Reading data from registers
always @ (Read or NCR_OUT or NCR_SEL)
begin
if(Read) // read
case(Address)
8'h0: DataOut<=NCR_OUT;
default: DataOut<=8'h0;
endcase

else
DataOut<=8'h0;
end

endmodule




这是 register的代码


module mac_register(DataIn, DataOut, Write, Clk, Reset, SyncReset);

parameter WIDTH = 8; // default parameter of the register width
parameter RESET_VALUE = 0;

input [WIDTH-1:0] DataIn;

input Write;
input Clk;
input Reset;
input SyncReset;

output [WIDTH-1:0] DataOut;
reg [WIDTH-1:0] DataOut;

always @ (posedge Clk or posedge Reset)
begin
if(Reset)
DataOut<=#1 RESET_VALUE;
else
if(SyncReset)
DataOut<=#1 RESET_VALUE;
else
if(Write) // write
DataOut<=#1 DataIn;
end

endmodule // Register
...全文
2747 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
elone_j 2011-06-09
  • 打赏
  • 举报
回复
不认真看书,该打屁股!
d_lina 2011-06-08
  • 打赏
  • 举报
回复
我发现,temp1不用声明也行。也就是把 wire temp1; 去掉
然后我还发现,名称随便起, 居然编译综合都能通过。
这是出于什么考虑?挺奇怪的,这种bug太严重了

这个是因为,在verilog中如果使用一个变量,而没对其声明的话,默认是wire型的变量
d_lina 2011-06-08
  • 打赏
  • 举报
回复
module mac_registers( DataIn, Address, Rw, Cs, Clk, Reset, DataOut,
FullD_In, //test,test2,test3,dataInTest
);

在FullD_In后面为什么还有,呢?这样也可以编译吗?
zkh0010 2011-05-29
  • 打赏
  • 举报
回复
你那个output是一组啊,如果不用wire占位的话,会对应不上的。你用一个wire把它的位置站住,然后wire什么都不连。生成的硬件结构应该就是那个引脚空下来了。这应该没问题的吧?
delacrxoix_xu 2011-05-27
  • 打赏
  • 举报
回复
我发现,temp1不用声明也行。也就是把 wire temp1; 去掉
然后我还发现,名称随便起, 居然编译综合都能通过。
这是出于什么考虑?挺奇怪的,这种bug太严重了
delacrxoix_xu 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bsnow 的回复:]

没太看懂你的意思。 但是调用的时候不定一要加“wire temp1”,你可以写成
.DataOut ({NCR_OUT[7:4],1'bz,NCR_OUT[2:0]}),
或者
.DataOut ({NCR_OUT[7:4],1'bx,NCR_OUT[2:0]}),
应该都行
[/Quote]

不行啊,说必须接到一个 结构表达式上
Error (10663): Verilog HDL Port Connection error at mac_registers.v(170): output or inout port "DataOut" must be connected to a structural net expression
bsnow 2011-05-27
  • 打赏
  • 举报
回复
对,我看错了。 因为你是output, 条用的时候必须连接到wire。
bsnow 2011-05-26
  • 打赏
  • 举报
回复
没太看懂你的意思。 但是调用的时候不定一要加“wire temp1”,你可以写成
.DataOut ({NCR_OUT[7:4],1'bz,NCR_OUT[2:0]}),
或者
.DataOut ({NCR_OUT[7:4],1'bx,NCR_OUT[2:0]}),
应该都行
废话不说了,下面进入正题,学习FPGA经历了这么几个阶段: ①、Verilog语言的学习,熟悉Verilog语言的各种语法。 ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。 ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。 先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在 Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像 systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语 言。 其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍: ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。 ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。 学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。 Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。 刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方 法等,不过做到后面发现CPLD的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生 了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载 口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是 cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪 测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目的几个主要功能:RS232通信,指令译码,配置DDS,AD数 据高速缓存,电子开关状态设置等,在实践学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好: ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII各个工具的用法 (IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。 ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。 ③、《FPGA设计指南--器件,工具和流程》:这本书看了他的目录忍不住就买了,这本书讲述了FPGA设计的各个方面,虽然每个方面都是点到为止,但能让你有个整体的概念,了解FPGA的所有设计功能,了解FPGA开发的整个流程。

6,120

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧