【学习笔记-FPGA】verilog语言中assign的使用

个人笔记。

assign在verilog语言中一般用于连接两个变量,将一个变量的值不断赋值给另一个变量,比如在顶层模块中调用另一模块的变量。

例:

///二级模块

module compile(

input                       i_clk,
input                       nrst,    

output [47:0]          o_sentence                             //input、output不声明类型的话,默认为wire型

);

reg [47:0] sentence;

assign       o_sentence[47:0]= sentence[47:0];           //左边的变量必须为wire型

endmodule

///顶层模块调用

wire [47:0] sentence;

compile compile_01(
   .i_clk(clk_50m),
   .nrst(nrst),    

.o_sentence(sentence[47:0])

);

如果需要用逻辑分析仪仿真的话,可以在输出仿真变量中写入sentence[47:0]。

如:

ila_0 ila_0_1(
   .clk(clk_50m),

    .probe0(sentence[47:0])

);

注意:连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句

对于想在顶层模块中调用输入信号,则不需要使用assign,直接在顶层模块中写入即可,不过需要对它进行引脚约束。

例:想要调用i_sentence

///二级模块

module compile(

input                       i_clk,
input                       nrst,    

input                       i_sentence ,

output [47:0]          o_sentence                             //input、output不声明类型的话,默认为wire型

);

///顶层模块

module TOP(

input               i_clk,
input               nrst,  

input                i_sentence,   //可以在顶层模块中直接引入i_sentence,不过需要对它进行引脚约束

output              o_A

);

compile compile_01(
   .i_clk(clk_50m),
   .nrst(nrst),    

   .i_sentence(i_sentence),

   .o_sentence()

);

如果需要用逻辑分析仪仿真的话,可以在输出仿真变量中写入i_sentence。

如:

ila_0 ila_0_1(
   .clk(clk_50m),

    .probe0(i_sentence)

);

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Verilog语言assign关键字用于将一个值分配给一个信号。它可以用于组合逻辑电路,将一个逻辑表达式的结果赋值给一个输出信号。assign语句通常用于在模块的顶层声明,用于连接模块的输入和输出信号。它可以用于连接多个模块,从而构建更复杂的电路。assign语句的语法如下: assign <output_signal> = <logic_expression>; 其,<output_signal>是要赋值的输出信号,<logic_expression>是一个逻辑表达式,用于计算输出信号的值。在assign语句,逻辑表达式可以包含常量、变量、运算符和其他信号。 ### 回答2: 在Verilog语言assign是用于给一个wire或reg信号赋值的关键字。它是一种非阻塞赋值,也就是说,这种赋值并不会阻塞其他的代码运行,而是在另一个时钟周期异步地执行。 在Verilog语言assign的语法格式为: assign 信号名 = 赋值表达式; 其,信号名可以是wire或reg类型的信号名称,也可以是一个由多个信号组成的复合信号。 赋值表达式是用于计算给信号赋的实际值的表达式。这个表达式可以包含常数、变量、运算符和函数。 assign可以用于组合逻辑的实现。它通常用于实现与门、或门、非门等基本逻辑门,也可以用于实现更复杂的逻辑功能。例如,以下代码可以实现一个简单的3输入与门: assign out = in1 & in2 & in3; 在这个例子,out是一个由assign语句赋值的wire信号,in1、in2、in3是输入信号,&是逻辑与运算符。 此外,assign还可以用于时序逻辑的实现。不过,这种用法比较少见,因为在时序逻辑,通常使用always语句来描述状态转换。 需要注意的是,在assign语句,信号名定义的信号必须是wire类型,也就是说,它只能进行赋值操作,而不能进行存储操作。如果定义的信号需要在时序逻辑使用,就需要使用reg类型的信号来替代wire类型的信号。 综上所述,assign是一种常用的关键字,在Verilog语言主要用于组合逻辑的实现。它可以帮助开发人员更方便地实现逻辑功能,提高开发效率。 ### 回答3: 在Verilog语言assign语句提供了一种简单的方式来将一个信号连接到另一个信号上。它的主要作用是给信号分配一个常量值或一个等式的结果,通常用于逻辑电路的简单赋值和连接。 assign的基本语法如下: assign [name] = [expression]; 其,name表示要连接的信号名称,expression表示分配给该信号的常量或等式的结果。可以使用assign将一个常量值直接连接到相应的信号上,如: assign data_out = 1'b0; 这个例子,我们将一个0赋值给data_out信号。注意,在assign语句,我们需要以1'b0表示0。 除了简单的常量赋值,我们也可以使用assign语句连接表达式。比如,如果我们想创建一个输出信号,它将输入信号加上一个常量(例如,0x10),可以使用类似如下的assign语句: assign sum = in + 4'b0001; 这个例子,我们创建了一个名为sum的输出信号,它将in信号加上一个常量(0x10)。注意,在这个例子,我们使用了一个二进制常数,以明确表达式的值。 除了简单的常量和表达式外,我们也可以使用assign语句连接模块端口。比如,在一个模块,将两个信号相加并将结果输出到sum信号,可以使用类似如下的assign语句: assign sum = a + b; 这个例子,我们使用assign将a和b信号相加,并将结果输出到sum端口上。 总之,assign语句是实现简单赋值和连接的重要部分,可以有效地减少Verilog设计重复的代码,并提高代码的可重复使用性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值