huangfeian0527 发表于 2013-10-10 11:07:03

基于FPGA 用verilog语言编写的多路模拟电子开关

请问一对八的应该怎么写程序?比如说单片机通过S2 S1 S0三位数据发送给FPGA ,fpga根据三位数值判断电子开关转换。我刚学不久还请各位大侠帮忙 ,谢谢

kebaojun305 发表于 2013-10-10 11:19:11

你确定是模拟开关

流氓马 发表于 2013-10-10 13:07:46

三位数据控制fpga的8个io的高低输出,进而控制开关

huangfeian0527 发表于 2013-10-10 14:20:21

kebaojun305 发表于 2013-10-10 11:19 static/image/common/back.gif
你确定是模拟开关

意思是用fpga搭建八路电子开关

huangfeian0527 发表于 2013-10-10 14:24:40

上图是通过 3、4、10、11四个引脚分别控制D1,D2,D3,D4四个电子开关,而我需要的是通过单片机发送数据给FPGA(如:001或100表示第一个或第四个电子开关导通),刚接触FPGA不久,望各位指导下代码怎么写

lans0625 发表于 2013-10-10 14:30:53

你这个东西在所有的verilog语言书中都有的,我用的VHDL,用when,case之类语句实现.

huangfeian0527 发表于 2013-10-11 11:49:23

谁有verilog语言 带控制端的电子开关方面的实例,求共享

mengf 发表于 2013-10-11 12:13:04

潘松等很多verilog的教材上就有四选一的例程,难道改成X选一会那么难吗?

proteldxp 发表于 2013-10-11 12:58:37

verilog用case语句就搞定了啊

marx 发表于 2013-10-11 13:15:30

FPGA根本没有模拟开关功能,怎么可能用verilog写出来?

huangfeian0527 发表于 2013-10-11 17:20:34

marx 发表于 2013-10-11 13:15 static/image/common/back.gif
FPGA根本没有模拟开关功能,怎么可能用verilog写出来?

楼上的意思是,不算很明白 ,能否详细点....{:smile:}

huangfeian0527 发表于 2013-10-11 18:13:59

proteldxp 发表于 2013-10-11 12:58 static/image/common/back.gif
verilog用case语句就搞定了啊

下面是我写的程序
// dzkg.v
module mux_case1(
               int1,int2,int3,select,
                     
               a1,b1,c1,d1,e1,f1,g1,h1,

               a2,b2,c2,d2,e2,f2,g2,h2,

               a3,b3,c3,d3,e3,f3,g3,h3,

                );

input   int1,int2,int3;

outputa1,b1,c1,d1,e1,f1,g1,h1;

outputa2,b2,c2,d2,e2,f2,g2,h2;

outputa3,b3,c3,d3,e3,f3,g3,h3;

input select;

reg    a1,b1,c1,d1,e1,f1,g1,h1;

reg    a2,b2,c2,d2,e2,f2,g2,h2;

reg    a3,b3,c3,d3,e3,f3,g3,h3;


always @(select or int1)
   begin
      case(select)
             3'b000 : a1<=int1;
             3'b001 : b1<=int1;
             3'b010 : c1<=int1;
             3'b011 : d1<=int1;
             3'b100 : e1<=int1;
             3'b101 : f1<=int1;
             3'b110 : g1<=int1;
             3'b111 : h1<=int1;
            
      endcase
   end

always @(select or int2)
   begin
      case(select)
             3'b000 : a2<=int2;
             3'b001 : b2<=int2;
             3'b010 : c2<=int2;
             3'b011 : d2<=int2;
             3'b100 : e2<=int2;
             3'b101 : f2<=int2;
             3'b110 : g2<=int2;
             3'b111 : h2<=int2;
      endcase
   end

always @(select or int3)
   begin
      case(select)
             3'b000 : a3<=int3;
             3'b001 : b3<=int3;
             3'b010 : c3<=int3;
             3'b011 : d3<=int3;
             3'b100 : e3<=int3;
             3'b101 : f3<=int3;
             3'b110 : g3<=int3;
             3'b111 : h3<=int3;
      endcase
   end

endmodule


编译的时候有警告 ,估计是产生锁存器
int1,int2接单片机串口 ,int3为使能信号

要达到的效果是
    由单片机串口输出的收发信号直接输出,而不用FPGA 寄存器(a1,b1...a2,b2... a3,b3...)存储单片机发过来的数据 ,而是将单片机发过来的数直接通过FPGA输出(意思是电子开关)如001表示电子开关1导通    int1, int2 就直接连接a1,b1 这样
怎么解决 ,帮忙啊,各位大侠!!!

proteldxp 发表于 2013-10-11 20:38:57

其实不用写代码,直接新建原理图,直接用quartus里面的74芯片。

huangfeian0527 发表于 2013-10-12 08:48:49

proteldxp 发表于 2013-10-11 20:38 static/image/common/back.gif
其实不用写代码,直接新建原理图,直接用quartus里面的74芯片。

诶 可惜我用的是ACTEL Libero 8.5软件直接画原理图但找不到芯片原理图中只有 与门、或门 等而我要的是带控制的电子开关

marx 发表于 2013-10-15 09:42:20

huangfeian0527 发表于 2013-10-11 17:20 static/image/common/back.gif
楼上的意思是,不算很明白 ,能否详细点....

你知道什么是“模拟开关”不?

huangfeian0527 发表于 2013-10-18 15:38:12

marx 发表于 2013-10-15 09:42 static/image/common/back.gif
你知道什么是“模拟开关”不?

我可能没表达清楚,我指的是用FPGA模拟一个数字电子开关,而不是指用Cmos管等构成的模拟开关,还请帮个忙 ,怎么用verilog语言编写这样的代码?

chiooo1 发表于 2013-10-18 15:50:20

huangfeian0527 发表于 2013-10-19 08:28:11

chiooo1 发表于 2013-10-18 15:50 static/image/common/back.gif
楼主,别个的意思是 数字开关可以,模拟的是做不了的

明白 ,目前的关键是如何用verilog语言实现带控制的数字电子开关,求例程或者类似的例程?

xivisi 发表于 2013-10-19 09:53:10

本帖最后由 xivisi 于 2013-10-19 09:58 编辑

基础东东,三八译码器,加多路选择,搜索一下吧
页: [1]
查看完整版本: 基于FPGA 用verilog语言编写的多路模拟电子开关