HDLBits--答案

 2.2.7 Vectorr

   

1)       

  2)  always 内部用for循环,需要定义interger类型变量,同时在always内部不能使用assign连续赋值。 generate...endgenerate可有可无

           3) for语句在always 外部,或者使用for循环例化模块,需要定义genvar变量,同时for()begin:名字(必须要有名字),genvar i;可以放在generate........endgenerate里面

  

 2.28

拼接运算符 {num{vector} }

2.2.9

2.3.1

模块的层次结构是通过在另一个模块中实例化一个模块来创建的

模块实例化的方法有两种:1)、按位置连接,2)、按名称连接

1)、按位置将电线连接到端口,实例化模块时,端口根据模块的声明从左到右连接,

mod_a instance1 ( wa, wb, wc );

此实例化类型的模块mod_a,并赋予它一个实例名“INSTANCE1”的,然后连接信号wa(新模块外部)的第端口(新模块的in1),wb到第端口(in2),以及wc所述第端口(out)。这种语法的一个缺点是,如果模块的端口列表发生更改,则还需要找到并更改模块的所有实例以匹配新模块。mod_a 中的in1,in2,out分别连接top_mudule中的a,b,out

2)、按名字将电线连接到端口,即使端口列表发生变化,电线也能保持正确连接。

mod_a instance2 ( .out(wc), .in1(wa), .in2(wb) );

上述行实例化类型的模块mod_a名为“INSTANCE2”,然后连接信号wa(模块外部)的端口命名 in1wb到端口命名 in2,和wc到端口命名 out。

2.3.2

2.3.3

 2.3.4

     q1、q2就相当于两根线,用q1将第一个D触发器的q端和第二个触发器的d端相连。q2同理。

2.3.5

多路复用器能将 N 个输入通道的数据复用到一个输出通道上。使用多路复用器可使多路数据信息共享一路信道,能充分地利用通信信道的容量,大大降低系统的成本。通过改变A与B的值,就能输出端F到底输出D1,D2,D3,D4中的哪个值

在这里插入图片描述                             在这里插入图片描述

 2.3.6

2.3.7

2.3.8

 2.3.9

加-减器可以由加法器通过选择性地对其中一个输入取反来构建,这相当于对输入取反然后加1。最终的结果是一个可以做两种操作的电路:(a + b + 0)和(a + ~b + 1)。

2.4.1

程序块内部代码的语法与外部代码不同过程块具有更丰富的语句集(例如,if-then、case),不能包含连续赋值。过程连续赋值确实存在,但与连续赋值有些不同,并且不可综合。

  • Combinational: always @(*)
  • Clocked: always @(posedge clk)

assign 和combinational always 块描述了相同的电路。两者都创建了相同的组合逻辑块。每当任何输入(右侧)更改值时,两者都会重新计算输出。  assign out1 = a & b | c ^ d; always @(*) out2 = a & b | c ^ d;

关于 wire 与 reg 的说明:assign 语句的左侧必须是net类型(例如,wire),而过程赋值(在 always 块中)的左侧必须是变量类型(例如,reg)。这些类型(wire 与 reg)与合成的硬件无关,只是 Verilog 用作硬件模拟语言时遗留下来的语法。

2.4.2

对于硬件综合,有两种相关的always块:

  • 组合逻辑:always@(*)
  • 时序逻辑:alwaalways@(posedge clk)

时序always块创建组合逻辑块,就像组合always块一样,但时序always块是在组合逻辑块的输出处创建一组触发器(或“寄存器”)。逻辑块的输出不是立即可见,而是仅在下一个 (posedge clk) 之后立即可见。

阻塞与非阻塞分配

Verilog 中有三种类型的赋值:

  • 连续赋值(assign x = y;)。不能在过程块中使用(“always块”)。
  • 程序阻塞赋值:( x = y; )。只能在过程块内部使用。
  • 程序非阻塞赋值:( x <= y; )。只能在过程块内部使用。

在一个组合always块,使用阻塞分配。在时序always块中,使用非阻塞分配。

 

 always@(posedge clk) 会先将输出结果放在寄存器中,在下一个时钟上升沿到来时在输出

always@(*)在赋值时和assign连续赋值语句一样,直接输出结果

2.4.3

2.4.4

 2.4.5

2.4.6

 2.4.7

先给这几个输出赋一个初值,这个样子就算没有default其他情况也不会出现错误

2.5.1

 不能像c语言那样直接写成下图这样,因为 c中是串行运行,而verilog中是并行运行 

2.5.3

2.5.4

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值