Verilog 使用条件(?:)赋值语句连接模块

Verilog 使用条件(?:)赋值语句连接模块,verilog,Verilog,我正在尝试根据位进程rw信号值不同地连接两个模块。 无法发布图片,因此: 如果位处理rw数据流:位输入-->SCR-->CRC-->位输出 如果不是,则它是一个接收器:bit_in-->CRC-->SCR-->bit_out 因此,我在顶部模块(所有导线类型)中进行了此操作: 测试台显示,只有输入被驱动(例如,rw=0 CRC输入工作,但其余为未知值)。 是因为我同时分配了输入到输出和输出到输入吗? 或者这是正确的,我应该在我的代码中寻找bug吗? 如果不是,如何仅使用每个模块的一个实例来执行此

我正在尝试根据
位进程rw
信号值不同地连接两个模块。 无法发布图片,因此:

如果位处理rw数据流:位输入-->SCR-->CRC-->位输出

如果不是,则它是一个接收器:bit_in-->CRC-->SCR-->bit_out

因此,我在顶部模块(所有导线类型)中进行了此操作:

测试台显示,只有输入被驱动(例如,rw=0 CRC输入工作,但其余为未知值)。 是因为我同时分配了输入到输出和输出到输入吗? 或者这是正确的,我应该在我的代码中寻找bug吗? 如果不是,如何仅使用每个模块的一个实例来执行此操作

希望我把一切都说清楚,谢谢你的时间

条件运算符(?:)是2:1单向mux。assign语句也是单向的。因此,分配会在匹配
*\u输出*
的信号上添加额外的驱动程序。多个冲突的驱动程序值是未知值的原因。要更正错误,请删除输出分配,并使用mux将mux分配给
位\u proc\u out*

/* Remove / comment out:
 * assign SCR_output = (bit_proc_rw) ? CRC_input : bit_proc_out;
 * assign SCR_output_dav = (bit_proc_rw) ? CRC_input_dav : bit_proc_out_dav;
 *
 * assign CRC_output = (bit_proc_rw) ? bit_proc_out : SCR_input;
 * assign CRC_output_dav = (bit_proc_rw) ? bit_proc_out_dav : SCR_input_dav;
 */

// Add
assign bit_proc_out = (bit_proc_rw) ? CRC_output : SCR_output;
assign bit_proc_out_dav = (bit_proc_rw) ? CRC_output_dav : SCR_output_dav;
/* Remove / comment out:
 * assign SCR_output = (bit_proc_rw) ? CRC_input : bit_proc_out;
 * assign SCR_output_dav = (bit_proc_rw) ? CRC_input_dav : bit_proc_out_dav;
 *
 * assign CRC_output = (bit_proc_rw) ? bit_proc_out : SCR_input;
 * assign CRC_output_dav = (bit_proc_rw) ? bit_proc_out_dav : SCR_input_dav;
 */

// Add
assign bit_proc_out = (bit_proc_rw) ? CRC_output : SCR_output;
assign bit_proc_out_dav = (bit_proc_rw) ? CRC_output_dav : SCR_output_dav;