首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >赋值语句将被合成为什么?

赋值语句将被合成为什么?
EN

Stack Overflow用户
提问于 2016-10-21 12:54:29
回答 2查看 1.3K关注 0票数 0

我很想知道这些线会合成什么?我正在设计一个直接映射的缓存,并使用赋值来分离我的索引、偏移量和标签位。它会合成成多路复用器吗?我没有提到整个代码,因为我只是想知道assign将如何处理合成。在8085编程中,我把这个词读成了“地址解复用器”,所以它令人困惑。

代码语言:javascript
复制
module cache 
        (   input bit clk,
            input bit rst,
            input logic [15:0] address,
            input logic valid_in,
            input logic compare,
            input logic wr,
            input logic enable,
            input logic write_through,
            output logic dirty,
            output logic [4:0] tag_out,
            output logic [15:0] data_out,
            output logic valid_out,
            output hit
        );

            logic [7:0] index;
            logic [1:0] offset;
            logic [4:0] tag_in;

            assign offset = address[1:0];
            assign index  = address[9:2];
            assign tag_in = address[15:10];

    endmodule
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 16:01:23

由于在assign的RHS上没有布尔运算符或算术运算符,这些语句只是成为address输入的部分选择的方便的命名引用。当您实例化一个模块并连接到它的端口时,也会发生同样的事情--信号可以通过更改名称。实际上,您可以将address输入端口声明编写为

代码语言:javascript
复制
input .address({tag_in,index,offset}),

在实例化该模块时,您仍然可以连接address端口,但是在模块内部,它只具有可供引用的tag_in、索引和偏移量,而不是地址。

SystemVerilog的alias构造使您更明显的是,您只是为一个信号创建一个方便的名称,而不是声明另一组信号和使用assign语句。

代码语言:javascript
复制
 alias offset = address[1:0];
 alias index  = address[9:2];
 alias tag_in = address[15:10];
票数 0
EN

Stack Overflow用户

发布于 2016-10-21 13:02:03

上面的代码只是简单地合成成电线的,因为只有赋值。我不知道您要创建什么解复用器逻辑,但是对于解复用器来说,通常需要有一个选择信号,根据该信号来解码应该启用的输出。

下面给出了1:2解复用器逻辑的一个例子。

代码语言:javascript
复制
module demux_1_2(
   input [3:0] Q, 
   input Sel,
   output reg [3:0] D1, 
   output reg [3:0] D2
   );

always@(*) 
begin
   if(~Sel) begin 
      D1 = Q;
      D2 = 0; 
   end else begin 
      D1 = 0; 
      D2 = Q; 
   end
end

endmodule
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40177226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档