如何用verilog语言编写一对四通道切换的程序
我想用FPGA 搭建一个 一对四 的多通道开关, 该如何用verilog 语言编写比如说 :我先通过两位控制线选择通道(00:通道一接通;01:通道二接通;10:通道三接通;11:通道四接通),我现在单片机发送00,FPGA 接通通道一,当我单片机发送01时,接通通道二,但通道一并没有拆除,该怎么办啊 ?
module waishe_case1(
Int_Tx,Int_En,Out_Rx,select,
Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4, //串口发送(FPGA)输出
Out_En1,Out_En2,Out_En3,Out_En4, // 485收发使能(FPGA)输出
Int_Rx1,Int_Rx2,Int_Rx3,Int_Rx4,// 串口接收(FPGA)输入
);
input Int_Tx,Int_En;
input Int_Rx1,Int_Rx2,Int_Rx3,Int_Rx4;
input select;
outputOut_Tx1,Out_Tx2,Out_Tx3,Out_Tx4;
outputOut_En1,Out_En2,Out_En3,Out_En4;
outputOut_Rx;
reg Out_Rx;
reg Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4;
reg Out_En1,Out_En2,Out_En3,Out_En4;
//reg Int_Tx,Int_En;
//reg Int_Rx1,Int_Rx2,Int_Rx3,Int_Rx4;
always @(select)
begin
case (select)
2'b00 :
begin
Out_Tx1<=Int_Tx;
Out_En1<=Int_En;
Out_Rx<=Int_Rx1;
end
2'b01 :
begin
Out_Tx2<=Int_Tx;
Out_En2<=Int_En;
Out_Rx<=Int_Rx2;
end
2'b10 :
begin
Out_Tx3<=Int_Tx;
Out_En3<=Int_En;
Out_Rx<=Int_Rx3;
end
2'b11 :
begin
Out_Tx4<=Int_Tx;
Out_En4<=Int_En;
Out_Rx<=Int_Rx4;
end
endcase
end
endmodule 最主要的问题是通道一切换到通道二,如何在通道二搭建之前,先把通道一给拆除? assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
always (*)
case(select)
2'b00: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx1, 4'b1000};
2'b01: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx2, 4'b0100};
2'b10: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx3, 4'b0010};
2'b11: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx4, 4'b0001};
default: ;
endcase winster321 发表于 2013-10-23 21:17 static/image/common/back.gif
assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
always (*)
case(select)
先谢了 ,哈哈哈。。。 能否帮我解释下assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
winster321 发表于 2013-10-23 21:17 static/image/common/back.gif
assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
always (*)
case(select)
能否帮我解析下这两段代码?
assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
{Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx1, 4'b1000} assign {Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={4{Int_Tx}};
always (*)
case(select)
2'b00: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx1, Int_En,3'b0};
2'b01: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx2, 1'b0,Int_En,2'b0};
2'b10: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx3, 2'b0,Int_En,1'b0};
2'b11: {Out_Rx,Out_En1,Out_En2,Out_En3,Out_En4} = {Int_Rx4, 3'b0,Int_En};
default: ;
endcase 本帖最后由 huangfeian0527 于 2013-10-24 12:43 编辑
always @(select)
begin
case(select,select)
begin
2'b00:
begin
{Out_En1,Out_En2,Out_En3,Out_En4}={ Int_En,3'bzzz};
{Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={Int_Tx,3'bzzz};
Out_Rx=Int_Rx1;
end
2'b01:
begin
{Out_En1,Out_En2,Out_En3,Out_En4}={ 1'bz,Int_En,2'bzz};
{Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={1'bz,Int_Tx,2'bzz};
Out_Rx=Int_Rx2;
end
2'b10:
begin
{Out_En1,Out_En2,Out_En3,Out_En4}={2'bzz, Int_En,1'bz};
{Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={2'bzz,Int_Tx,1'bz};
Out_Rx=Int_Rx3;
end
2'b11:
begin
{Out_En1,Out_En2,Out_En3,Out_En4}={3'bzzz, Int_En};
{Out_Tx1,Out_Tx2,Out_Tx3,Out_Tx4}={3'bzzz,Int_Tx};
Out_Rx=Int_Rx4;
end
default : ;
end
end
这样写可以吗?
当输入Int_Tx与输出Out_Tx1连接后 ,要使Int_Tx与输出Out_Tx2连接,并要把Int_Tx与Out_Tx1拆除,请问上面的代码能否实现?
页:
[1]