归65 2022-05-10 12:58 采纳率: 66.7%
浏览 83
已结题

verliog语言代码注解,代码已完成。(尽量详细,最好每一步都有)

1、用FPGA实现彩灯控制电路的设计。
2、彩灯控制电路具有1个复位按钮,当按钮按下后开始彩灯控制电路的工作。
3、彩灯控制电路至少有4种以上的控制模式,如左移、右移、循环移位和闪烁等,彩灯控制电
路开始工作后,各工作模式能自动切换。
4、用12只发光二极管(LED)显示彩灯控制电路的工作模式。

img

img


fpq是一个20MHZ的分频器,将仪器提供的频率为20MHZ时钟转换成1HZ的时钟,然后输出到有需要的端口,触发模块起作用。
cd2-6是彩灯控制程序,用来控制彩灯的四种模式。CLK是时钟控制信号,CLR是复位信号,EN是使能端,S1,S2是可以改变LED灯的,如左移、右移和循环移位等。
程序
(1)module fpq(clkin,clkout);
input clkin;
output reg clkout;
reg[24:0] temp;
always @(posedge clkin)
begin
if(temp<20000000) temp=temp+'b1;
else temp=0;
endalways @(posedge clkin)
begin
if(temp<10000000) clkout='b0;
else clkout='b1;
end
endmodule
彩灯程序
(2)module cd2_6 (CLK,CLR,EN,S1,S2,LED);
input CLK,CLR,EN,S1,S2;
output reg [11:0] LED;
reg temp;
reg c;
initial
LED='b000000000001;
always @(posedge CLK)
begin
if(EN==0)
begin
case({S1,S2})
'b00:begin
c=c+'b1;
if(c=='b1)
LED='b100100100100;
else
LED='b011011011011;
end
'b01:begin
c=c+'b1;
if(c=='b1)
LED='b000000000000;
else
LED='b111111111111;
end
'b10:begin
temp=LED[0];
LED=LED>>1;
LED[11]=temp;
end
'b11:begin
temp=LED[11];
LED=LED<<1;
LED[0]=temp;
end
endcase
end
if (CLR==1) LED=000000000001;
end endmodule

  • 写回答

2条回答 默认 最新

  • 树下等苹果 2022-05-10 13:55
    关注

    代码说明如下,请查看:

    module cd2_6 (CLK,CLR,EN,S1,S2,LED); //定义模块名和输入、输出、使能、控制端口
    input CLK,CLR,EN,S1,S2;  //输入端口说明
    output reg [11:0] LED;   //输出端口说明
    reg temp;                     //在always中被赋值的要定义为reg类型
    reg c;                         //同上一条
    initial
        LED='b000000000001;   //初始化LED状态为1
    always @(posedge CLK) //posedge CLK表示always语句对CLK信号上升沿敏感,每次上升沿到来就执行always语句块
    begin                 //begin 和end搭配,相当于括号()
        if(EN==0)          //使能端口EN==0,就执行下面的begin end之内的指令
        begin
        case({S1,S2})      //S1、S2为控制端,{}为位拼接运算符
        'b00:                     //S1=0、S2=0时,执行下方的begin-end之间语句,为循环移位功能
        begin 
           c=c+'b1;        //c+1,因为c是1位二进制数,所以c要么等于0,要么等于1(超过1的部分被舍弃)
           if(c=='b1) LED='b100100100100; // 部分LED亮,部分灭
          else       LED='b011011011011; // 上次亮的,这次灭;上次灭的,这次亮;
       end
       'b01:   //S1=0、S2=1时,执行闪烁功能
        begin
            c=c+'b1;
            if(c=='b1) LED='b000000000000;  //LED全灭(或全亮)
            else       LED='b111111111111;  //LED全亮(或全灭)
        end
        'b10:   //S1=1、S2=0时,执行右移功能
        begin
            temp=LED[0];   //因为要实现首尾状态互换,所以用temp作为中间变量
            LED=LED>>1;    //右移
            LED[11]=temp;  //最后一位=首位
            //例如:1010,temp=0,移位后x101,在对最后一位赋值,x=temp=0,所以:1010->0101,实现循环移位
        end
        'b11:   //S1=1、S2=1时,执行左移功能,原理同右移
        begin
            temp=LED[11];
            LED=LED<<1;
            LED[0]=temp;
        end  
       endcase
       end
       if (CLR==1) LED=000000000001; //如果复位信号CLR==1,LEN复位为初始状态
    end 
    endmodule
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 修改了问题 5月10日
  • 修改了问题 5月10日
  • 展开全部

悬赏问题

  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置