网站备案 接入商,城市建设投资公司网站,网站商城与网站区别吗,seo的中文是什么Verilog中的条件语句\多分支语句\循环语句 文章目录 Verilog中的条件语句\多分支语句\循环语句一、背景二、if-else2.1 标准结构2.2 例子 三、case-endcase3.1 标准结构3.2 例子3.2.1 三路选择器的case部分#xff0c;如下#xff1a;3.2.2 casez的四路选择器#xff0c;如下…Verilog中的条件语句\多分支语句\循环语句 文章目录 Verilog中的条件语句\多分支语句\循环语句一、背景二、if-else2.1 标准结构2.2 例子 三、case-endcase3.1 标准结构3.2 例子3.2.1 三路选择器的case部分如下3.2.2 casez的四路选择器如下 四、for4.1 标准结构4.2 例子 五、repeat5.1 标准结构5.2 例子5.2.1 循环11次5.2.2 存储8个数据 六、forever6.1 标准结构6.2 例子6.2.1 产生一个时钟6.2.2 实现一个时钟边沿控制的寄存器间数据传输功能 一、背景
由于初学Verilog故写篇笔记记录Verilog中的 if-else、case-endcase、for、while、repeat、forever语法以及例子。
二、if-else
定个标准每个if-else的出现都要有begin-end语句。
2.1 标准结构
条件语句标准使用结构 if (condition1) begintrue_statement1 ;
end
else if (condition2) begintrue_statement2 ;
end
else if (condition3) begintrue_statement3 ;
end
else begindefault_statement ;
end2.2 例子
二输入选择器
if(en) beginif(sel 2b1) beginsout p1 ;endelse beginsout p0 ;end
end三、case-endcase
case 语句是一种多路条件分支的形式可以解决 if 语句中有多个条件选项时使用不方便的问题。casex、 casez 语句是 case 语句的变形用来表示条件选项中的无关项。
3.1 标准结构
case(case_expr)condition1: true_statement1 ;condition2: true_statement2 ;……default: default_statement ;
endcasecasex 用 “x” 来表示无关值casez 用问号 “?” 来表示无关值。
两者的实现的功能是完全一致的语法与 case 语句也完全一致。
但是 casex、casez 一般是不可综合的多用于仿真。
例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。
3.2 例子
3.2.1 三路选择器的case部分如下
case(sel)2b00: sout_t p0 ;2b01: sout_t p1 ;2b10: sout_t p2 ;default: sout_t p3 ;
endcase3.2.2 casez的四路选择器如下
module mux4to1(input [3:0] sel ,input [1:0] p0 ,input [1:0] p1 ,input [1:0] p2 ,input [1:0] p3 ,output [1:0] sout);reg [1:0] sout_t ;always (*)casez(sel)4b???1: sout_t p0 ;4b??1?: sout_t p1 ;4b?1??: sout_t p2 ;4b1???: sout_t p3 ; default: sout_t 2b0 ;endcaseassign sout sout_t ;endmodule四、for
4.1 标准结构
for 循环语法格式如下
for(initial_assignment; condition ; step_assignment) begin…
end4.2 例子
// for 循环语句
integer i ;
reg [3:0] counter2 ;
initial begincounter2 b0 ;for (i0; i10; ii1) begin#10 ;counter2 counter2 1b1 ;end
end
五、repeat
repeat的功能是执行固定次数的循环它不能像 while循环那样用一个逻辑表达式来确定循环是否继续执行。repeat循环的次数必须是一个常量、变量或信号。如果循环次数是变量信号则循环次数是开始执行 repeat循环时变量信号的值。即便执行期间循环次数代表的变量信号值发生了变化repeat执行次数也不会改变。
5.1 标准结构
repeat循环语法格式如下
repeat (loop_times) begin…
end5.2 例子
5.2.1 循环11次
// repeat 循环语句
reg [3:0] counter3 ;
initial begincounter3 b0 ;repeat (11) begin //重复11次#10 ;counter3 counter3 1b1 ;end
end5.2.2 存储8个数据
always (posedge clk or negedge rstn) beginj 0 ;if (!rstn) beginrepeat (8) beginbuffer[j] b0 ; //没有延迟的赋值即同时赋值为0j j 1 ;endendelse if (enable) beginrepeat (8) begin(posedge clk) buffer[j] counter3 ; //在下一个clk的上升沿赋值j j 1 ;endend
end仿真结果如下图。 由图可知rstn 拉高时buffer的 8 个向量同时赋值为 0。
第二个时钟周期后buffer依次被counter3赋值实现了连续存储 8 个数据的功能。
六、forever
forever语句表示永久循环不包含任何条件表达式一旦执行便无限的执行下去系统函数$finish可退出forever。 forever相当于while(1)。 通常forever 循环是和时序控制结构配合使用的。
6.1 标准结构
forever循环语法格式如下
forever begin…
end6.2 例子
6.2.1 产生一个时钟
reg clk ;
initial beginclk 0 ;forever beginclk ~clk ;#5 ;end
end6.2.2 实现一个时钟边沿控制的寄存器间数据传输功能
reg clk ;
reg data_in, data_temp ;
initial beginforever (posedge clk) data_temp data_in ;
end