HDLBits练习 Verilog Language;Procedures

1.Alwaysblock1

1.always语句的基本语法
always @(敏感事件列表)
begin: 块名
块内局部变量定义;
过程赋值语句;
end
例:

module half_adder(a,b,en,c);
         input a,b,en;
         output reg[1:0] c;
         always@(a or b or en)
               if(en)
                   begin 
                   		c[1] =a^b;
                   		c[0] =a^~b;
                   end
  endmodule

2.case语句的基本语法
case (case表达式)
分支项表达式1:语句1;
分支项表达式2:语句2;
分支项表达式3:语句3;
分支项表达式4:begin 语句4-1;语句4-2;语句4-3;end
default:default语句
endcase
当每个分支语句多于一条时多的语句要写在begin···end块中
例:

          always@(*)
        case(scancode)
            16'he06b:   begin   left=1'b1;   down=1'b0;  right=1'b0;  up=1'b0;end//==当一个case下有多个分号时应该添加begin  end==
            16'he072:   begin   down=1'b1;   right=1'b0;  left=1'b0;  up=1'b0;end
            16'he074:   begin   right=1'b1;   down=1'b0;  left=1'b0;  up=1'b0;end
            16'he075:   begin   up=1'b1;   down=1'b0;  right=1'b0;  left=1'b0;end
            default :begin left=1'b0;down=1'b0;right=1'b0;up=1'b0;end
        endcase
endmodule

例1:
在这里插入图片描述
解:

// synthesis verilog_input_version verilog_2001
module top_module(
 input a, 
 input b,
 output wire out_assign,
 output reg out_alwaysblock
);
 	assign out_assign = a & b;
 always@(*)
     out_alwaysblock = a & b;
endmodule

问题

  1. reg与wire的区别
    always中需要用reg进行定义

2.Alwaysblock2

与上题没有太大区别多了一块时序always块中使用非阻塞性赋值
例1:
在这里插入图片描述
解:

// synthesis verilog_input_version verilog_2001
module top_module(
    input clk,
    input a,
    input b,
    output wire out_assign,
    output reg out_always_comb,
    output reg out_always_ff   );
    assign out_assign = a^b;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值