cpld小程序,麻烦大虾看一下

2019-07-16 01:33发布

本帖最后由 大帝成员组 于 2013-6-7 18:59 编辑

老师叫我用有128个宏单元的cpld做一个8bit*8bit的实验,可是我编好程序之后说宏单元超了,怎么破啊
下面是我的程序,见笑了:
module test(L,sw,sw1,clk,segment)
        input clk;
        input [1:8]sw,sw1;//两个拨码开关,要相乘
        output [1:8]L,segment;//动态显示控制变量
        wire [7:0]decode[10];
        wire [3:0]flag[8];//保存拨码开关乘积
        reg [15:0] Count;//动态显示计时

/*led显示码*/
        assign decode[0]=8'b11111100;
        assign decode[1]=8'b01100000;
        assign decode[2]=8'b11011010;
        assign decode[3]=8'b11110010;
        assign decode[4]=8'b01100110;
        assign decode[5]=8'b10110110;
        assign decode[6]=8'b10111110;
        assign decode[7]=8'b11100000;
        assign decode[8]=8'b11111110;
        assign decode[9]=8'b11110110;
        assign segment=decode[flag[Count[13:11]]];
        assign L=8'd1<<Count[13:11];
        assign flag[7]=0;
        assign flag[6]=0;
        assign flag[5]=0;
        assign flag[4]=(sw*sw1)/10000;
        assign flag[3]=(sw*sw1)%10000/1000;
        assign flag[2]=(sw*sw1)%1000/100;
        assign flag[1]=(sw*sw1)%100/10;
        assign flag[0]=(sw*sw1)%10;
        always @(posedge clk)
        begin
               
                Count<=Count+1;
        end
endmodule


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
15822671739
1楼-- · 2019-07-16 07:18
 精彩回答 2  元偷偷看……
cleusewitz
2楼-- · 2019-07-16 11:56
assign flag[4]=(sw*sw1)/10000;
        assign flag[3]=(sw*sw1)%10000/1000;
        assign flag[2]=(sw*sw1)%1000/100;
        assign flag[1]=(sw*sw1)%100/10;
        assign flag[0]=(sw*sw1)%10;

这段代码直观但是要占用很多逻辑单元的,建议采用移位的方法直接求结果 我记得网上应该有相应代码的
大帝成员组
3楼-- · 2019-07-16 16:12
15822671739 发表于 2013-6-7 22:40
直接LPM,费事!

大虾,我知道你很厉害。lpm我还得百度一下,你知道我什么水平了吧
所以,下次请表述不但简洁,还要明了
大帝成员组
4楼-- · 2019-07-16 17:42
cleusewitz 发表于 2013-6-8 08:13
assign flag[4]=(sw*sw1)/10000;
        assign flag[3]=(sw*sw1)%10000/1000;
        assign flag[2]=(s ...

嗯,后来移位做的,但是只能做四位的。水平有限啊,老师给过了,八位的看以后有机会研究没有了
林赵林
5楼-- · 2019-07-16 17:46
顶顶看看看看看阿卡

一周热门 更多>