cpld的一个I/O口串行送数,有没有比这个 更优化的方法了?
always @(posedge clk)begin
d<=d+1'b1;
end
always @(d)
begin
case(d)
9'h1:dataout = 1'b0;
9'h2:dataout = 1'b0;
9'h3:dataout = 1'b0;
9'h4:dataout = 1'b0;
9'h5:dataout = 1'b0;
9'h6:dataout = 1'b0;
9'h7:dataout = 1'b1;
9'h8:dataout = 1'b0;
default:dataout = 0;
endcase
end
一个I/O口串行送数dataout (一次送一位2进制数),h1--h9 上面代码中I/O(dataout)向外送了一数 02H(0000 0010);我想知道有没有什么别的方法送,不需要用case一个一个列出来,就是写一个02H 然后通过 循环移位送出来.我这样写太烦琐了,因为要是10个8位的十六进制的数的话,就需要用case列出80行的代码,请问下有没有什么好的方法 取代我的用case 送数,谢谢了. coutn是数据,左移
reg data_out;
always @(posedge clk_out )
{data_out,Count}<={Count,1'b0}; 那我要送好几个数(30H,56H,84H...),而且要依次送,怎么办啊 我也是刚学的,说错可要多多包容
input in;
case(in)
0: 0x30=count;
1: 0x56=count;
2: 0x84=count;
.
.
. 怎么定义优化?消耗资源少,工作频率高,还是?
资源少的,Shifter + MUX最节约。CPLD的Shifter需要特别的写法,充分利用内部节点;FPGA一般写法就行。 用一楼的方法试试看,占用9个LE:
module test (data_out,clk_out,data_in,clk_cs);
input clk_out,clk_cs;
input data_in;
output data_out;
reg data_out;
reg Count;
always @(posedge clk_out)
begin
if (clk_cs)
Count<=data_in;
else
{data_out,Count}<={Count,1'b0};
end
endmodule
页:
[1]