Verilog中如何在always block中对其他module进行调用?

我现在需要编写一个ALU,要求可以对两个4位的输入变量进行加减乘除以及逻辑运算,然后在basys2板子上实现,现在我把加减乘除和逻辑运算分为4个module已经都写好了,然后需要在主程序中调用,因为每一种运算的切换是根据我在电路板上按下不同的按键,所以我在主程序中想要通过if...else实现,如下:
always @ (*) begin
if(s==0)
调用 adder。。。
else if(s==1)
调用subtractor。。。
else if 等等情况
这种情况应该怎么调用呢?我知道不能用module instance和module instantiation在always block中的。。。
求大神解答!

又及,模块实例化是不能用在always block中的……我现在需要解决的就是怎么能通过判断输入然后运行相应的模块

你这完全是用软件的思维来写硬件

你有了加减乘除4个模块,你现在要做的是用一个顶层模块来例化他们,同时判断输入是加减乘除中的那个,分别送到4个模块,而不是你所说的调用

另外task几乎是不用来写综合语句的,你们老师是在坑你追问

可是模块实例化不能用在always block中啊,而if...else..语句只能用在always block中,我需要用if..else来进行输入的判断,我现在要解决的就是这个问题……

追答

你可以用一个always block来判断加减乘除,并产生一个flag去启动加减乘除运算

追问

怎么用Flag启动运算呢?能不能说的详细一些,比如举个例子,拜托了!

追答

比如alway块判断是进行加操作,flag置1,然后加模块开始工作,加运算结束了,给个信号通知always块将flag置0

大概就是这个意思,具体自己定

温馨提示:内容为网友见解,仅供参考
无其他回答

Verilog中如何在always block中对其他module进行调用?
你有了加减乘除4个模块,你现在要做的是用一个顶层模块来例化他们,同时判断输入是加减乘除中的那个,分别送到4个模块,而不是你所说的调用 另外task几乎是不用来写综合语句的,你们老师是在坑你

verilog的module中怎样循环调用另外几个module?
submod1 u1(...); \/\/这里就是调用子模块 submod2 u2(...);endmodule module submod1(...)...endmodule module submod2(...)...endmodule 上述所有放主程序topmod.v里即可。子程序也可以拆分出去,分别命名为submod1.v, submod2.v。

Verilog程序中如何调用子模块?
verilog在调用模块的时候(也称模块实例化),信号端口可以通过位置或名称关联,其形式如下面的例子:module and (C,A,B);input A,B;output C;...endmodule and A1 (T3, A1, B 1); \/\/A1为调用and这个模块的一个加法器,在对A1进行实例化时采用位置关联,T3对应输出端口C,A对应A1,B...

关于verilog 中always块的总线与敏感列表问题
always的模块有两种用法,一个是时序logic,在时延posedge 或者是negedge来的时候,进行相关的工作。需要注意的时候,这个logic在实际电路上只能是一个d触发器,所以只能有一个时钟。另外一个是组合logic,在这种情况下,那个敏感列表是可以有多个信号的,但是不能是单独检查某个信号的posedge或者是negedge。...

一个设计好的Verilog文件(即一个设计模块),如何在其他设计文件(顶层...
这个的话只要在顶层文件中进行例化就可以使用了,一般verilog的教程上都有很多内容教例化方法的,你可以参考一下,有什么不明白的你可以具体点问我,这样问太笼统了

verilog 一个module中不同always块之间数据可以传递么
要做成可综合的RTL code,一个数据只能在一个always块中赋值,但是可以直接在其他always块中引用

谁懂verilog语言,帮我看看这个程序,这个用maxplus2仿真的。有错误,第...
不能在两个always block里面对同一个变量赋值!!去掉以下语句,然后将enread1放到另一个always block里面!always @ (enread1) (这部分是要去掉的)begin index7<=0;end 以下是修改的:always @ (posedge clk2)begin if (reset==0)begin outjie<=0;index7<=0;end else if(enread1)index...

verilog中always块里的时序逻辑
在Verilog TestBench中,首先声明变量并创建时钟。然后实例化计数器模块,将其与testbench信号连接。使用always块启动时钟,激励信号并在一段时间后取消复位信号。观察波形图,计数器从0计数到9,回滚到0并再次开始计数。4位左移寄存器接受LSB输入d,其他位向左移位1。例如,初始值为0011,d为0时,输出变...

初学Verilog语言,有个问题:always@( )列表里面不能同时有电平敏感事件...
不能同时有电平触发与边沿触发信号存在,综合的时候通不过,例如Xlinx ISE 会报错Xst:902 Unexpected xxx event in always block sensitivity list.同样的,一个逻辑块里不能同时阻塞赋值和非阻塞赋值。必须分开写。

verilog 里面 在always 下有两个 if 语句 就出现如下错误 高手请进_百 ...
verilog对边沿触发的逻辑有规定:你写了negedge rst,就必须在always内的第一个if中写~rst的逻辑。就是你把if(en)写在rst下面就好了。这样综合时推断的是一个异步复位的寄存器。--- 为什么语法要这么规定我也不知道。@()里面的第一项是时钟定义,第二项和第三项(如果有的话)是异步复位和异步置...

相似回答