本人菜鸟,有个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; //分频系数

这是一个双重判定语句。首先针对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;
但是看不懂你这句语句为什么这么写。。。。。。。。。。。。追问

是一份教材上的例程。。。我也觉得很怪。。

温馨提示:答案为网友推荐,仅供参考
相似回答