generate-if和case generate-if和case的功能类似于条件编译,即根据参数定义,有选择的生成对应的generate中的电路 当参数条件少的时候,我们可以用if localparam def = 0; //参数定义 generate if(def == 0) assign a = 0; //将a赋值为0 else assign a = 1; //将
但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。 (3)在if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句如下所示。 if(a...
括号内是敏感列表,下边表示sys_clk上升沿或者sys_rst_n下降沿到来时执行always语句。 always(posedgesys_clkornegedgesys_rst_n)if(sys_rst_n == l'b0) cnt <=8'd0;//初值为0elseif(cnt == CNT_MAX)//计数到最大参数时,就一直保持cnt <= CNT_MAX;elsecnt <= cnt +8'd1;//否则就一直加1 assi...
output reg [4-1:0] Q ); parameter MASK = 3 ; reg [4-1:0] mem [0:(1<<4)-1] ; always @(posedge CLK) begin if (EN && WR) begin mem[A] <= D & MASK; end else if (EN && !WR) begin Q <= mem[A] & MASK; end end endmodule 对此进行一个简单的仿真,testbench 编写如下...
1) 与case语句中的控制表达式和多分支表达式这种比较结构相比,if_else_if结构中的条件表达式更为直观一些。 2) 对于那些分支表达式中存在不定值x和高阻值z位时,case语句提供了处理这种情况的手段。下面的两个例子介绍了处理x,z值位的case语句。 [例1]: ...
图6-1:示例6-1的综合结果:作为MUX的if-else 使用if-else作为锁存器。示例6-2显示了表示锁存器的if语句。 示例6-2:使用if不适用else来仿真锁存器功能 `begin_keywords "1800-2012" // use SystemVerilog-2012 keywords module latch #(parameter N = 4) // bus size ...
Parameter用于申明一些常量,主要是便于模块的移植或升级时的修改。示例如下: 登录后复制module<模块命名>(<端口命名1>,<端口命名2>,...); 登录后复制//输入端口申明 登录后复制input<端口命名1>; 登录后复制input wire<端口命名2>; 登录后复制input[<最高位>:<最低位>]<端口命名3>; ...
Verilog的条件语句包括if语句和case语句。 (1)if语句 ①if语句中的条件判断表达式(括号中的那个)一般为逻辑表达式或者关系表达式或者就一个变量。如果表达式的值是0、X或者Z,则全部按照“假”处理;若为1,则按照“真”处理。 ②在应用中,else if 分支的语句数目由实际情况决定;...
全局的变量都要用define来声明,只有单个模块使用的变量才用parameter来声明 时序逻辑与组合逻辑最好不要糅在一个always中 reg,在不同的always块中可以是register也可以是latch也可以是组合逻辑的wire,这个所有人都知道。由此要注意的是,组合逻辑不要写在边沿触发的always块中,要单独拿出来,这样可以避免一些可以综合成...
parameterMASK=3; reg[4-1:0]mem[0:(1<<4)-1]; always@(posedgeCLK)begin if(EN&&WR)begin mem[A]<=D&MASK; end elseif(EN&&!WR)begin Q<=mem[A]&MASK; end end endmodule 对此进行一个简单的仿真,testbench 编写如下: 实例 `timescale1ns/1ns ...