请教verilog问题

moduleshifter'defineLEFT_SHIFT1'b0'defineRIGHT_SHIFT1'b1reg[31:0]addr,left_addr,right... module shifter
'define LEFT_SHIFT 1'b0
'define RIGHT_SHIFT 1'b1
reg[31:0] addr,left_addr,right_addr;
reg control;

alwayse@(addr)
begin
left_addr=shift(addr,LEFT_SHIFT);
right_addr=shift(addr,RIGHT_SHIFT);
end

module shifter
'define LEFT_SHIFT 1'b0
'define RIGHT_SHIFT 1'b1
reg[31:0] addr,left_addr,right_addr;
reg control;

alwayse@(addr)
begin
left_addr=shift(addr,LEFT_SHIFT);
right_addr=shift(addr,RIGHT_SHIFT);
end

function[31:0]shift;
input[31:0]address;
input control;
begin
shift=(control=='LEFT_SHIFT) ?(addrsss<<1):(address>>1);
end
endfunction
endmodule
begin
shift=(control=='LEFT_SHIFT) ?(addrsss<<1):(address>>1);
end
endfunction
endmodule

1.这是北航夏老师书里面一道移位的例题,shift函数的第一行:
function[31:0]shift;
书上说了,函数的返回类型如没有说明,默认为reg类型,即相当于
function reg[31:0]shift;

2.第二,第三行
input[31:0]address;
input control;
按照常规,没有说明则默认为wire类型,即相当于:
input wire[31:0]address;
input wire control;
如果这样,主模块调用shift函数时怎么能将reg类型赋给被调函数的wire 类型呢?
说不通啊!

3 C语言中函数调用时有“传数值”与“传地址”的区别,设想VERILOG的函数调用是不是也是这样呢?
假设主模块在调用shift函数的时候,二则都用integer类型,shift函数的input端口与主模块的相应变量是用同一个地址吗?或者不是同一个地址(只是将值拷贝过来)?
展开
 我来答
DoramiHe
2017-02-19 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25335 获赞数:59536
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
这种写法完全就是业余写法么,你们verilog是怎么教的,或者说你有VHDL的经验,从VHDL转过来还是要改变一下风格的。
底下是你原来的写法。
module baidu(input xt,
input zq,
output reg[3:0] out);
always@(posedge zq or posedge xt) begin
if(zq) out<=0;
case(xt)
1'b1:out<=out+1'b1;
default;
endcase
end
endmodule
Warning (10240): Verilog HDL Always Construct warning at baidu.v(6): inferring latch(es) for variable "out", which holds its previous value in one or more paths through the always construct
Latch只是一个问题。你所报的warning是因为你把zq和xt在begin end里面都用上了。这完全是没有必要的,有些综合器认为时钟信号是不能用来测试的。什么叫做测试?就是if(zq)和case(xt)这种判定。
首先你要认定你要写的是时序逻辑,然后选定好时钟--比如xt,那么zq其实是一个复位信号。
xt都已经上升沿了,那么case(xt)是没有效果的,总是1。
改成这样不就好了:
module baidu(input xt,
input zq,
output reg[3:0] out);
always@(posedge zq or posedge xt) begin
if(zq) out<=0;
else out<=out+1'b1;
end
endmodule
中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式