verilog 编译错误:Concurrent assignment to a non-net registerr is not permitted

module testmodule(Writedata,Writeregister,clk);
input clk;
input Writedata;
output reg Writeregister;
always @(clk)
begin
Writeregister<=Writedata;
end
endmodule

module newtest(clockk,dataa);
input clockk;
input dataa;
reg registerr;
testmodule tss(dataa,registerr,clockk);
endmodule

代码如上
使用软件为xilinx
testmodule可以正常运行,但是在用newtest调用testmodule的时候就会出错。
错误信息如下:

ERROR:HDLCompiler:329 - "testmodule.v" Line 35. Concurrent assignment to a non-net registerr is not permitted
WARNING:HDLCompiler:918 - "testbe.vhw" Line 46. Size mismatch in mixed language port association, verilog port clockk
ERROR:Simulator:777 - Static elaboration of top level VHDL design unit testbe in library work failed
经过测试,只有把第二个module里的reg registerr变成wire registerr才能运行。但是wire就无法实现想要的功能
求解应该如何调用testmodule

verilog 编译错误是设置错误造成的,解决方法如下:

1、首先打开软件快捷方式

2、新建工程File -->New Project Wizard...。

3、设置工程路径,如“F:/quartusii_prct/test”,工程名“test”,点击"Nest",确定“Yes”--再点击“Next”。

4、选择好FPGA系列,直接在所有可见的器件选择;选择完毕,点击“Next”-->“Next”-->"Finish",新建工程完成

5、进入工程,新建verilog文件,点击“File”-->“New”-->"Verilog HDL File"-->"OK"。

6、接下来可以编译,点击三角按钮如图,可以观察到编译结果。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
调用子模块时 输出端口只能用wire类型变量进行映射 这是verilog语法规定的

不知道你说的“无法实现想要的功能”是指什么 但是如果你需要输出信号是reg类型
可以增加一个wire类型中间变量 再把这个中间变量赋值给一个reg类型变量

wire a;
testmodule tss(dataa,a,clockk);

reg registerr;
always @ *
registerr <= a;本回答被提问者和网友采纳
相似回答