本人菜鸟,有个verilog的条件赋值语句的问题,assign clk_out = (F_DIV == 1) clock :(F_DIV[0] (clk_p_r & clk_n_r) :clk_p_r);F_DIV[0]是什么意思?F_DIV[0]不是一直是0吗?所以就选择clk_p_r?F_DIV == 1又有什么意义?其中:reg
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/28 14:37:10
本人菜鸟,有个verilog的条件赋值语句的问题,assign clk_out = (F_DIV == 1) clock :(F_DIV[0] (clk_p_r & clk_n_r) :clk_p_r);F_DIV[0]是什么意思?F_DIV[0]不是一直是0吗?所以就选择clk_p_r?F_DIV == 1又有什么意义?其中:reg
本人菜鸟,有个verilog的条件赋值语句的问题,
assign clk_out = (F_DIV == 1)
clock :(F_DIV[0] (clk_p_r & clk_n_r) :clk_p_r);
F_DIV[0]是什么意思?F_DIV[0]不是一直是0吗?所以就选择clk_p_r?F_DIV == 1又有什么意义?
其中:reg clk_p_r; //上升沿输出时钟
reg clk_n_r; //下降沿输出时钟
......
parameter F_DIV = 50000; //分频系数
本人菜鸟,有个verilog的条件赋值语句的问题,assign clk_out = (F_DIV == 1) clock :(F_DIV[0] (clk_p_r & clk_n_r) :clk_p_r);F_DIV[0]是什么意思?F_DIV[0]不是一直是0吗?所以就选择clk_p_r?F_DIV == 1又有什么意义?其中:reg
这是一个双重判定语句.首先针对F_DIV[0] ? (clk_p_r & clk_n_r) : clk_p_r进行判定,判断F_DIV的第0位是否为1,如果为1,则判定结果为clk_p_r & clk_n_r,如果为0,判定结果为clk_p_r;然后进行二次判定,判定F_DIV 是否为1,如果为1,则clk_out=clock,如果不为1,则clk_out=第一次的判定结果.
另外,你这个F_DIV = 50000,则F_DIV[0]=0,所以一次判定结果为clk_p_r;又二次判定是f_div==1;故最终结果为clk_out=clock;
但是看不懂你这句语句为什么这么写.